Ruby on rails ActiveRecord:如何获取可以批量分配的模型的所有属性?

Ruby on rails ActiveRecord:如何获取可以批量分配的模型的所有属性?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我想有一个可以大规模分配的所有属性名称的列表。我需要一个自定义表单生成器,默认情况下不会添加无法批量分配的输入字段 例如,如果我有以下模型: class Post < ActiveRecord::Base attr_protected :account belongs_to :author validates_presence_of :title, :author end class Post

我想有一个可以大规模分配的所有属性名称的列表。我需要一个自定义表单生成器,默认情况下不会添加无法批量分配的输入字段

例如,如果我有以下模型:

class Post < ActiveRecord::Base
  attr_protected :account

  belongs_to :author

  validates_presence_of :title, :author
end
class Post

因此,我希望有
[:author,:title]
如果您明确定义attr\u accessible,Post.accessible\u属性将涵盖它

除此之外,做这样的事情很笨拙,但很有效:

Post.new.attributes.keys - Post.protected_attributes.to_a
只用

Post.accessible_attributes

这将返回类的所有答案

前面提到的一些答案可能不适用于Rails 4


您可以使用
MyModel.attribute\u names
来获取表属性数组,但是,这可能不会为您提供大量可分配的属性,因为Rails的这一方面随着版本4的变化而改变,对于模型,您可以使用
MyModel.attribute\u names
MyModel.column\u names


例如,您可以使用MyModel.new.attribute\u名称

Post.accessible\u attributes.to\u.map(&:to\u sym)

因此,如果可访问属性得到显式属性可访问的属性,而受保护属性得到显式属性可访问的属性,那么有没有一种方法可以告诉您哪些属性是可访问的,而不管它们是通过属性可访问还是属性可访问的?谢谢您的发布。这是对我的filter attributes方法的一个很好的补充。有一个问题,这将列出:created\u at,:updated\u at as accessible attributes!!,他们是not@MhdSyrwan:您确定您不是说:在
处创建的和:在
处更新的不应被访问,而不是
处不应被访问?如果您使用name=“post[created_at]”和value=“01/01/2012”传递输入,它不会进入模型吗?在这里。取决于您的Rails版本(Rails core将在Github/accessible attributes丑闻之后更改默认值)。@BrenoSalgado:您是对的:),这取决于Rails版本注意,如果使用多个角色,您可以通过传递符号-
Post.accessible\u attributes(:user)
Post.accessible\u attributes来获得不同的列表(:admin)
,等等。我还发现
Post.active\u authorizers
很有帮助,它返回了所有定义角色及其可访问属性的散列。您使用的是哪个版本的ruby?使用ruby 2.2.2;Rails 4.1.2:我有一个由数据库表支持的
用户
模型。对于
User.accessible\u属性
,我得到
NoMethodError:un为#
MyRails版本4.2.6定义了方法“accessible_attributes”,但返回了错误。但是@Scudelletti的答案是有效的。这就是我需要的,谢谢。我正在尝试为一个模型禁用批量分配。:-)一个小的解释会更好。从评论队列:我可以请你在你的答案周围添加一些上下文吗。只有代码的答案很难理解。如果你能在你的文章中添加更多的信息,这将有助于询问者和未来的读者。