无法在关联模型的Active Admin索引属性中显示(belongs_to / has_many) - Rails 3.2

时间:2013-10-11 20:23:09

标签: ruby-on-rails ruby ruby-on-rails-3 activeadmin

我正在构建每日交易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'创建表单中,我以管理员的身份输入与该交易相关联的品牌:

管理员/ deal.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, admin_brand_path(deal.brand)
  end

......不起作用。

我该怎么做?

我尝试了所有内容,但我基本上不知道如何获取品牌的名称,因为它与交易表中的brand_id相匹配。

任何帮助表示感谢。

更新 我得到的错误是它不理解函数.name:未知方法'name'

2 个答案:

答案 0 :(得分:4)

您需要处理deal.brand nil的情况。

ActiveAdmin.register Deal do
  index do   
    selectable_column   
    # id_column 
    column :title
    column :deal_amount
    column :brand do |deal|
      if deal.brand.present?
        link_to deal.brand.name, admin_brand_path(deal.brand)
      else
        status_tag('Empty')
      end
    end
  end
end

答案 1 :(得分:0)

您的:brand列对我来说是正确的。如果您在控制台中找到了deal,那么deal.branddeal.brand.name会得到什么?