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的答案是有效的。这就是我需要的,谢谢。我正在尝试为一个模型禁用批量分配。:-)一个小的解释会更好。从评论队列:我可以请你在你的答案周围添加一些上下文吗。只有代码的答案很难理解。如果你能在你的文章中添加更多的信息,这将有助于询问者和未来的读者。