Active Admin未正确显示标签名称

时间:2016-09-30 00:18:00

标签: ruby-on-rails ruby many-to-many activeadmin

在我的应用中,我categorieslabels他们都属于products

在管理面板中,用户可以添加产品,创建标签和类别,然后为产品分配类别和标签。

当我创建标签时,名称在标签面板中正确显示(见照片)

enter image description here

问题是标签名称在分配给产品时没有正确显示(见下图),但显示的是类别名称。这很奇怪,因为两列都具有相同的设置。

Admin products panel标签中显示的数字为Label#1``Label#2等(见下图)

_navbar.html.erb我有这个代码来显示类别和标签......并且它在那里正确显示。

                <ul class="dropdown-menu" role="menu">
                    <% @categories.each do |category| %>
                        <li><%= link_to category.name, category %></li>
                    <% end %>         
                </ul>
            </li>       
              <li class="dropdown full-width">
                <a href="#" class="dropdown-toggle" 
                data-toggle="dropdown">
                    Labels
                </a>
                <ul class="dropdown-menu" role="menu">
                   <% @labels.each do |label| %>
                        <li><%= link_to label.label_name, label %></li>
                    <% end %>    
                </ul>
            </li>       

我在这里遗漏了什么吗?我无法理解为什么标签没有正确显示。

有没有人与主动管理员有相同或类似的问题?

任何人都可以看看这个吗?

提前致谢

enter image description here

enter image description here

enter image description here

这是app/admin/category.rb

ActiveAdmin.register Category do

 permit_params :name

end

app/admin/label.rb中有以下代码:

ActiveAdmin.register Label do

 permit_params :label_name

end

app/admin/product.rb

ActiveAdmin.register Product do


 permit_params :title, :description, :image, :price_usd, :price_isl, :category_id, :label_id

 index do
    column :title
    column :category
    column :label
    column :created_at

    column :price_isl, :sortable => :price_isl do |product|
        number_to_currency product.price_isl
    end
    column :price_usd, :sortable => :price_usd do |product|
        number_to_currency product.price_usd
    end

    actions
end
end

然后是Schema.rb的部分内容

create_table "labels", force: :cascade do |t|
  t.string   "label_name"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
end

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

2 个答案:

答案 0 :(得分:6)

Active Admin在显示对象时进行有根据的猜测。

这是它尝试按顺序调用的方法列表

  • DISPLAY_NAME
  • FULL_NAME
  • 名称
  • 用户名
  • 登录
  • 标题
  • 电子邮件
  • to_s

因此,它适用于类别,因为类别具有:name属性。

对于labels,您可以执行以下操作:

class Label < ActiveRecord::Base
    def display_name
      label_name
    end
end

您还可以在ActiveAdmin初始化程序中配置显示的名称:

ActiveAdmin.setup do |config|    
  config.display_name_methods = [:display_name, :full_name, :name, ..., :to_s]
end

答案 1 :(得分:1)

主动管理员有时会因为命名而变得棘手......在categories表格中,您有一个名为column的{​​{1}},它看起来像你想要的那样工作?

您是否尝试将:name中的label_name列更改为名称?

我很确定能为你做到这一点。

Active Admin很可能没有在labels.rblabel之间注册下划线,这就是它显示的内容。