4

我正在构建一个日常交易 Rails 应用程序来学习 RoR。

在过去的几个小时里,我遇到了一个问题:我无法在活动管理员上获取其他关联模型的模型属性。让我告诉你确切的问题:

我有两个模型:品牌(即交易的品牌)和交易。一个交易属于一个品牌,但一个品牌可以有多个交易。

models/deal.rb 是这样的:

class Deal < ActiveRecord::Base
  belongs_to :brand

我们有models/brand.rb:

class Brand < ActiveRecord::Base    
  has_many :deals

  attr_accessible :name

我在迁移中做了 t.belongs_to,所以没关系。

在 Active Admin's Deals 的创建表单中,我以管理员身份输入该交易与哪个品牌相关联:

管理员/游戏.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 的名称,因为它与 Deal 表中的 brand_id 匹配

任何帮助表示赞赏。

4

2 回答 2

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

您可以使用与父模型相同的样式进行嵌套关系

于 2014-09-29T14:35:00.057 回答
3

似乎缺少一些东西:

class Deal < ActiveRecord::Base
  belongs_to :brands, foreign_key: :brand_id, class_name: 'Brand'
end

这是假设您的意思partner是 aBrand并且您的架构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

我强烈建议尝试在您的命名中保持一致,因为它会使事情变得不那么混乱,并且需要更少的代码来使事情正常工作。IE

class Deal < ActiveRecord::Base
  belongs_to :brand
end

f.input :brand, label: 'Select a brand:'

auto_link deal.brand

并且您的 DB 列仍然可以命名为brand_id.

于 2013-10-11T00:21:50.563 回答