Ruby on rails Hacking attru accessible可支持创建和更新的一组不同的可访问属性
我试图找出如何使attr_的这个hack可访问,以支持我的代码中的一个非常常见的用例,但在查看了attr_可访问和ActiveRecord::Base源代码一段时间后,仍然不知道从哪里开始。我可能会在深入挖掘后找到答案,但首先我想问一下是否有其他人会觉得这个黑客有用,如果现在有其他方法可以做到这一点Ruby on rails Hacking attru accessible可支持创建和更新的一组不同的可访问属性,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我试图找出如何使attr_的这个hack可访问,以支持我的代码中的一个非常常见的用例,但在查看了attr_可访问和ActiveRecord::Base源代码一段时间后,仍然不知道从哪里开始。我可能会在深入挖掘后找到答案,但首先我想问一下是否有其他人会觉得这个黑客有用,如果现在有其他方法可以做到这一点 以下是用例: 对于许多模型,在创建对象和更新对象时,应通过体量指定访问的属性是不同的。一个简单的例子是用户模型,它有两个属性:用户名和密码。当对象刚刚创建时,我希望用户名和密码都可以通过批量分配访
以下是用例: 对于许多模型,在创建对象和更新对象时,应通过体量指定访问的属性是不同的。一个简单的例子是用户模型,它有两个属性:用户名和密码。当对象刚刚创建时,我希望用户名和密码都可以通过批量分配访问。创建对象后,应该只能通过批量分配访问密码,因为不可能更改用户名 当然,我可以在控制器的create方法中手动设置对象的用户名,但我发现每个模型都会出现这种情况。如果可以为creates和updates指定一组不同的attr_可访问属性,我可以继续使用标准的restfulnew和create方法(例如,由继承的_资源提供的方法)。此外,我认为这些信息属于模型 下面是我认为它的工作原理:
class User < ActiveRecord::Base
attr_accessible :password
attr_accessible_create :email
attr_accessible_update :bio
...
通过这些技巧,您可以继续在控制器中使用User.update_属性(params[:User])和User.new(params[:User]),并且知道质量分配的内容已经处理好了。如果您的控制器是由诸如继承的_资源(它会严重摇晃并不断改进)或资源_控制器之类的东西创建的,那么您不必担心为这个简单、常见的用例创建自定义控制器操作
我的专家Rails用户向您提出的问题是:
谢谢 ActiveRecord有一种方法可以满足您的需要。我很确定这种功能目前不存在 如果你继续把它作为一个gem来实现,我可能会更喜欢你提出的#2语法。现在的一般规则是,您只能在模型中使用attr\u protected或attr\u accessible一次,并且不能将它们混合使用。添加更多attr_*语句可能会让人困惑 你应该把它作为一个gem来实现吗?为什么不呢?把至少你觉得有用的东西放在外面也没什么坏处
很抱歉,在最后一点上我帮不了你。:) 至少允许只在创建时设置属性,但不能解决相反的问题。啊,太好了!不知道attr_readonly。这确实解决了部分问题。
class User < ActiveRecord::Base
attr_accessible :email, :password, :bio
attr_protected_create :bio
attr_protected_update :email
...
attr_accessible :password, :create => [:email], :update => [:bio]