Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4为所有模型属性选择下拉列表_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails Rails 4为所有模型属性选择下拉列表

Ruby on rails Rails 4为所有模型属性选择下拉列表,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我正在尝试实现一个选择下拉列表,显示模型属性名称的选择。在某些情况下,这还包括关联模型属性的名称 我尝试过使用Model.attribute_名称,但这也添加了id、created_at和updated_at属性。相关属性也需要以用户友好的方式显示,即account_id需要映射到account.number 我正在尝试为很多模型这样做,我想将所有属性添加到一个选择下拉列表中。另一个教程指出Model.reflect\u on\u all\u associations.map&:name返回所有

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

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

我正在尝试为很多模型这样做,我想将所有属性添加到一个选择下拉列表中。另一个教程指出Model.reflect\u on\u all\u associations.map&:name返回所有关联模型,所以我想知道循环使用这些模型是否是一种解决方案

有什么想法吗?

你可以利用:

编辑 要从选择列表中删除不必要的属性,您可以创建一个常量,该常量定义您不希望出现在选择列表中的所有属性:

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\u list\u of_attributes返回一个只包含所需属性的列表。

我将把它转移到关注点:

模型/关注点/attr_getter.rb

然后将其包含在您需要的任何模型中


至于获取关联属性,我只想通过将所有模型的属性数组添加到一起,将它们专门包含在视图中。

谢谢@Andrey。Model.column_names解决方案确实提供了特定模型的所有属性名称。您是否知道如何删除不需要的属性以及在同一数组中显示关联的属性?因为我使用的是rails 4,所以我认为可访问的属性对我来说不起作用……我可能是错的,因为我对rails很陌生。@Herm您可以使用任何可用于数组的方法,例如Arrayreject-Model.column_names.reject{c | c.include?'created_at'}刚刚提出了一个问题,原因是要提到关注点,如果OP需要更多此类功能,则只需一次。说得好!谢谢@evanbikes。这很有帮助!我只需要在第二行中添加ExtendActiveSupport::Concern,就可以实现这一点。谢谢,是的。更新答案。这是一个集体的努力!
def self.desired_list_of_attributes
  Model.column_names - REMOVE_FROM_LIST
end
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