Ruby on rails ActiveScaffold显示关系值
我在ActiveScaffold中显示了一个简单的表。该表有三个字段:一个ID、一个描述和另一个ID,该ID是另一个表的外键。在ActiveScaffold列表视图中,我希望显示相关表中的“name”字段,而不是外键值(一个没有帮助的ID号) 我浏览了ActiveScaffold的基本文档、常见问题解答和论坛(以及进行了一次SO搜索),但运气不佳。AS API文档描述了大量与ActiveRecord关联的功能,但似乎对建立这些关系的基础知识一无所知Ruby on rails ActiveScaffold显示关系值,ruby-on-rails,ruby-on-rails-3,activerecord,rails-activerecord,activescaffold,Ruby On Rails,Ruby On Rails 3,Activerecord,Rails Activerecord,Activescaffold,我在ActiveScaffold中显示了一个简单的表。该表有三个字段:一个ID、一个描述和另一个ID,该ID是另一个表的外键。在ActiveScaffold列表视图中,我希望显示相关表中的“name”字段,而不是外键值(一个没有帮助的ID号) 我浏览了ActiveScaffold的基本文档、常见问题解答和论坛(以及进行了一次SO搜索),但运气不佳。AS API文档描述了大量与ActiveRecord关联的功能,但似乎对建立这些关系的基础知识一无所知 我怎样才能做到这一点呢?经过两天的搜索和实验,
我怎样才能做到这一点呢?经过两天的搜索和实验,我终于找到了答案。我想我会把它贴出来,以防万一这对别人有帮助 我将在下面使用一个客户和订单示例(即,一个客户可以有多个订单,我们希望客户的名称显示在订单的ActiveScaffold视图中)。数据结构刻意保持非常简单 首先是以下几个基本定义:
- 子表是包含外键的表。在本例中,订单将具有Person表中的外键
- 父表是子表关联的表。Customer表是下面示例中的父表
class CustomerOrderAdd < ActiveRecord::Migration
def change
create_table(:customers, primary: :target_group_id) do |t|
t.column :full_name, :string, null: false
end
create_table(:orders, primary: :order_id) do |t|
t.column :customer_id, :int, null: false
t.column :order_desc, :string, null: false
end
add_foreign_key :orders, :customers
end
end
属于*parent object symbol singular form*
,同样在我们的示例中,这会导致:
class Order < ActiveRecord::Base
belongs_to :target_group
. . .
end
config.columns[:customer_name].includes = :customer]
def customer_name
customer.full_name
end
config.columns[:customer_name].includes = :customer]
def customer_name
customer.full_name
end