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

Rails 4 Select Dropdown for all Model Attributes

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

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

我正尝试对很多模型执行此操作,我想将所有属性添加到一个 select 下拉列表中。另一个教程指出 Model.reflect_on_all_associations.map(&:name) returns 所有关联模型,所以我想知道循环遍历这些是否是一个解决方案?

有什么想法吗?

你可以利用column_names:

Model.column_names # will return an array of table attributes

编辑

至于从 selection 列表中删除不必要的属性,您可以创建一个常量,它定义了您不想出现在 select 列表中的所有属性:

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

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

您可以进一步定义 class 方法,returning 所需的属性列表:

def self.desired_list_of_attributes
  Model.column_names - REMOVE_FROM_LIST
end

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

我会把它变成一个问题:

model/concerns/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 在您需要的任何模型中。

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