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
在您需要的任何模型中。
至于获取关联属性,我会通过将任何模型的属性数组添加在一起,专门将它们包含在您的视图中。
我正在尝试实现一个 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
在您需要的任何模型中。
至于获取关联属性,我会通过将任何模型的属性数组添加在一起,专门将它们包含在您的视图中。