gpt4 book ai didi

mysql - 如何在 Rails 中显示名称而不是 Id

转载 作者:行者123 更新时间:2023-11-30 22:34:50 25 4
gpt4 key购买 nike

这个问题让我完全难住了。我在 RoR 和学习方面仍然是新手。

我有两个表:Countertops 和 Countmaterial。用户将为他们的台面选择所有功能,包括 Material 类型。 Material 的选项列在计数 Material 表中,并且是从集合中选择的。

我的问题是,一旦做出选择并创建了 Countertop,我如何在 Countertops 的索引页面上显示 Material 类型的名称而不是 countertype,后者是为匹配 Countmaterial 表中的名称而生成的整数?

例如,我宁愿索引显示“Granite”而不是“1”。 “Granite”列在 Countmaterial 表中,当用户选择“Granite”时,它会在 Countertype 列中将 Countertop 表填充为“1”。大理石是一个“2”等等...

这是我的架构:

create_table "countertops", force: :cascade do |t|
t.string "size"
t.string "color"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "ZipCode"
t.string "countertype"
end

create_table "countmaterials", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "countertop_id"
end

我的索引台面 Controller :

def index
@countertops = Countertop.all
@countertops = Countertop.includes(:countmaterial).all
end

我的索引代码:

<% @countertops.each do |countertop| %>
<tr>
<td><%= countertop.ZipCode %></td>
<td><%= countertop.countmaterial.name %></td>

协会:

class Countertop < ActiveRecord::Base
has_one :countmaterial
end

class Countmaterial < ActiveRecord::Base
belongs_to :countertop
end

大家怎么看?

最佳答案

您会对您的特定型号名称感到困惑;命名模型和 Controller 时——保持 super 简单。一个字...

#app/models/counter.rb
class Counter < ActiveRecord::Base
#columns id | type_id | material_id | size_id | color_id | zip_code| created_at | updated_at
belongs_to :type
belongs_to :material
belongs_to :size
belongs_to :color
delegate :name, to: :size, prefix: true
end

#app/models/option.rb
class Option < ActiveRecord::Base
#columns id | Type | name | created_at | updated_at
has_many :counters
end

#app/models/size.rb
class Size < Option
end

#app/models/type.rb
class Type < Option
end

#app/models/color.rb
class Color < Option
end

#app/models/material.rb
class Material / Option
end

这将使您能够执行以下操作:

#config/routes.rb
resources :counters

#app/controllers/counters_controller.rb
class CountersController < ApplicationController
def index
@counters = Counter.all
end
end

#app/views/counters/index.html.erb
<% @counters.each do |counter| %>
<%= counter.size_name %>
<% end %>

为了让您了解其工作原理,您需要知道 Rails 和 Ruby 是面向对象的。这可能意义不大,但在使用它们开发应用程序时至关重要。

Object orientated programming是一种将对象 置于代码中心的模式。当您了解其工作原理时,永远都不会相同...

enter image description here

在“传统”编程中,您使用用户流程。这被称为 event driven programming ,虽然适用于标准应用程序,但它不适合 Ruby/Rails 环境。

Web 应用程序有能力处理如此多的数据/功能,因此将一切都视为一个对象非常有意义。

因此,每当您处理 Ruby 时,您都必须从您尝试处理的对象的角度考虑一切 CRUD (Create Read Update Destroy) .

这就是为什么您的 CounterTop 模型有点粗略 - 您尝试调用的对象是什么?

一旦您了解对象 是 Rails 工作方式的核心,您将能够围绕它构建一切,如上所述。

关于mysql - 如何在 Rails 中显示名称而不是 Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32873573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com