【问题标题】:ActiveAdmin & active_enum gemActiveAdmin & active_enum gem
【发布时间】:2013-06-28 12:27:46
【问题描述】:

我使用 active_enum gem 有以下值:

initializers/active_enum.rb

ActiveEnum.define do
  # defines Syllabus
  enum(:syllabus) do
    value :id => 1, :name => 'Trinity Rock & Pop'
    value :id => 2, :name => 'Trinity Guildhall'
    value :id => 3, :name => 'ABRSM'
  end
end

models/lesson.rb

class Lesson < ActiveRecord::Base
  enumerate :syllabus
end

admin/lessons.rb

ActiveAdmin.register Lesson do
  index do
    column :syllabus
  end
end

ActiveAdmin 索引列显示教学大纲:id,我如何让它显示教学大纲:name

我试过了

column :syllabus, :name
column :syllabus_name
column :syllabus.name

具有 AA 的 CRUD 按预期与 :names 一起工作

【问题讨论】:

    标签: ruby-on-rails ruby enums activeadmin


    【解决方案1】:

    根据 AA Docs http://www.activeadmin.info/docs/3-index-pages/index-as-table.html (4th sn-p) 和 ActiveEnum Documentation

    你可以这样得到名字:

    column('Name') {|lesson| lesson.syllabus(:name)}
    

    【讨论】:

    • 嗯,不起作用。另外,我在教程中找不到对您的代码的任何引用。
    • 查看参考中的第 4 个代码 sn-p:column 'Title'... 在一般情况下,这是一种在 AA 列中显示范围内每个实例的任何方法(或属性值)的结果的方法。 . 你有每个对象的范围,你必须声明获取名称的方法。据我了解你的对象是什么,获取名称的方法是s[:name]...如果我在这部分错了,请尝试其他有效的方法来获取实例的名称
    • 我已经逐字复制了您的代码,收到错误“预期”;或行尾”。但是,我毫不怀疑您已经接近目标,并且会在我有时间时尝试使您的代码正常工作。非常感谢您提供帮助。
    • awh...{...}do |..| ... ;end 不一样...再次更正我的答案 - 必须是正确的! (更改为column 'Name' =&gt; column('Name')
    • 抱歉,修改后的代码在语法上是正确的,我希望它能正常工作,但是 ActiveAdmin 索引列仍然显示值“2”而不是“Trinity Guildhall”。我和你一样沮丧(如果不是因为花费的时间以及值存储为字符串而不是整数的事实),但我必须接受我自己的答案,因为它是迄今为止唯一有效的答案。非常感谢您尝试帮助兄弟!
    【解决方案2】:

    解决了。可能不是完成这项工作的最佳方式,但它很简单而且很有效:

    initializers/active_enum.rb

    ActiveEnum.define do
      # defines Syllabus
      enum(:syllabus) do
        value :id => 'Trinity Rock & Pop', :name => 'Trinity Rock & Pop'
        value :id => 'Trinity Guildhall', :name => 'Trinity Guildhall'
        value :id => 'ABRSM', :name => 'ABRSM'
      end
    end
    

    通过更改 :id 以匹配 :name,ActiveAdmin 索引列显示预期的字符串。

    注意:

    • 使用

    initializers/active_enum.rb

    config.use_name_as_value = true
    

    将值 :id 保存在数据库中,但 activeadmin 将值 :name 显示为“空”。

    • Activeadmin 过滤器 :as => :select 不起作用。 :as => :search 没有问题。

    【讨论】:

    • 这绝对不是最好的方法。这里没有必要使代码不 DRY 值 id 和名称重复
    • 我很好奇,只有 :id 而没有 :name 的 active_enum gem 是否也能正常工作? gem 的自述文件表明可以具有隐式 :id 但 :name 必须始终存在。如果有人想试验并报告他们的发现,请这样做。我已经在这个问题上花费了足够的时间,必须继续前进。
    • 注意:如果没有值的 :name,Active_enum 将不起作用。所以到目前为止还没有办法让这些值 DRY。
    猜你喜欢
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多