我正在尝试实现一个显示精选模型属性名称的选择下拉列表。在某些情况下,这还包括关联模型属性的名称。
我尝试过使用Model.attribute_names,但这也添加了id,created_at和updated_at属性。关联的属性也需要以用户友好的方式显示,即account_id需要映射到account.number。
我正在尝试为很多模型执行此操作,并且我想将所有属性添加到一个选择下拉列表中。另一个教程表明Model.reflect_on_all_associations.map(&:name)返回所有关联模型,所以我想知道循环这些是否可能是一个解决方案?
有什么想法吗?
答案 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
以你需要的任何模型。
至于获取关联属性,我会通过添加任何模型来专门将它们包含在您的视图中。属性数组在一起。