Rails 4选择所有模型属性的下拉列表

时间:2015-01-18 16:33:24

标签: ruby-on-rails ruby-on-rails-4

我正在尝试实现一个显示精选模型属性名称的选择下拉列表。在某些情况下,这还包括关联模型属性的名称。

我尝试过使用Model.attribute_names,但这也添加了id,created_at和updated_at属性。关联的属性也需要以用户友好的方式显示,即account_id需要映射到account.number。

我正在尝试为很多模型执行此操作,并且我想将所有属性添加到一个选择下拉列表中。另一个教程表明Model.reflect_on_all_associations.map(&:name)返回所有关联模型,所以我想知道循环这些是否可能是一个解决方案?

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

您可以使用column_names

Model.column_names # will return an array of table attributes

修改

为了从选择列表中删除不必要的属性,您可以创建一个常量,该常量定义您不希望进入选择列表的所有属性:

REMOVE_FROM_LIST = ['created_at', 'updated_at', 'id']

然后调用Model.column_names - REMOVE_FROM_LIST将只返回所需的属性。

您可以进一步定义一个类方法,返回所需的属性列表:

def self.desired_list_of_attributes
  Model.column_names - REMOVE_FROM_LIST
end

现在,调用Model.desired_list_of_attributes会返回一个只包含所需属性的列表。

答案 1 :(得分:1)

我会将此置于一个问题:

<强>模型/关切/ attr_getter.rb

module AttrGetter
  extend ActiveSupport::Concern
  module ClassMethods
    def accessible_attrs
      column_names.reject { |a| a.in? %w(id created_at updated_at) }
    end
  end
end

然后include以你需要的任何模型。

至于获取关联属性,我会通过添加任何模型来专门将它们包含在您的视图中。属性数组在一起。