Ruby on rails Hacking attru accessible可支持创建和更新的一组不同的可访问属性

Ruby on rails Hacking attru accessible可支持创建和更新的一组不同的可访问属性,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我试图找出如何使attr_的这个hack可访问,以支持我的代码中的一个非常常见的用例,但在查看了attr_可访问和ActiveRecord::Base源代码一段时间后,仍然不知道从哪里开始。我可能会在深入挖掘后找到答案,但首先我想问一下是否有其他人会觉得这个黑客有用,如果现在有其他方法可以做到这一点 以下是用例: 对于许多模型,在创建对象和更新对象时,应通过体量指定访问的属性是不同的。一个简单的例子是用户模型,它有两个属性:用户名和密码。当对象刚刚创建时,我希望用户名和密码都可以通过批量分配访

我试图找出如何使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用户向您提出的问题是:

  • 作为Ruby/Rails的新手,现在我忽略了有什么方法可以做到这一点吗
  • 如果支持此功能,您觉得它有用吗
  • 您更喜欢哪种语法:
  • 属性可访问性更新和属性可访问性创建
  • 属性可访问:更新=>[],:创建=>[]
  • 都支持,伙计
  • 我应该把它做成宝石吗
  • 如果您知道在使用attr\u accessible/attr\u protected值新建/创建/更新/生成期间,参数在哪里被清除,那么您可以指出这一点就太好了

  • 谢谢

    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]