我正在构建每日交易Rails应用程序以学习RoR。
我在过去的几个小时内遇到了一个问题:我无法获得活动管理员上其他相关模型的模型属性。让我告诉你这个问题:
我有两种模式:品牌(即交易的品牌)和交易。交易属于品牌,但品牌可以有很多交易。
models / deal.rb是这样的:
class Deal < ActiveRecord::Base
belongs_to :brand
我们有模特/ brand.rb:
class Brand < ActiveRecord::Base
has_many :deals
attr_accessible :name
我在我的迁移中做了t.belongs_to所以这没关系。
在Active Admin's Deals'创建表单中,我以管理员的身份输入与该交易相关联的品牌:
管理员/ game.rb
ActiveAdmin.register Deal do
# -- Form -----------------------------------------------------------
form do |f|
f.inputs "Brand (i.e. client)" do
f.input :brand_id, :label => "Select a brand:", :as => :select, :collection => Brand.all
end
效果很好,我可以创建特定品牌的优惠。 但是我无法在我的交易列表中显示品牌的名称:
ActiveAdmin.register Deal do
index do
selectable_column
# id_column
column :title
column :deal_amount
column :brand do |deal|
link_to deal.brand.name
end
......不起作用。
我该怎么做?
我尝试了一切,但我基本上不知道如何获取品牌的名称,因为它与交易表中的brand_id相匹配。
任何帮助表示感谢。
答案 0 :(得分:5)
show do |f|
panel "Subject" do
attributes_table_for f, :name, :description, :is_visible
end
panel "Pages in List View" do
table_for(f.pages) do |page|
column :name
column :permalink
column :is_visible
end
end
panel "Pages in View " do
div_for(f.pages) do |page|
panel page.name do
attributes_table_for page, :name, :description, :is_visible
end
end
end
end
end
您可以使用与父模型相同的样式进行嵌套关系
答案 1 :(得分:3)
似乎缺少一些事情:
class Deal < ActiveRecord::Base
belongs_to :brands, foreign_key: :brand_id, class_name: 'Brand'
end
这假设您的意思是partner
为Brand
而您的架构使用brand_id
来表示该关系。
在您的表单中,您只需使用:
form do |f|
f.inputs "Brand (i.e. client)" do
f.input :partner, label: 'Select a brand:'
end
end
您的link_to
来电实际上并不会按照您的方式链接到网址。
column :brand do |deal|
link_to deal.partner.name, admin_brand_path(deal.partner)
# or simpler
auto_link deal.partner
end
我强烈建议您尝试在命名方面保持一致,因为它会使事情变得更加混乱,并且需要更少的代码才能使事情发挥作用。即。
class Deal < ActiveRecord::Base
belongs_to :brand
end
f.input :brand, label: 'Select a brand:'
auto_link deal.brand
您的数据库列仍可以命名为brand_id
。