首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails - attr_accessible和质量分配

Rails - attr_accessible和质量分配
EN

Stack Overflow用户
提问于 2009-06-04 16:58:56
回答 4查看 1.6K关注 0票数 3

我有一个关于在Rails中使用attr_accessible的问题。

有时我想将guard_protected_attributes设置为false,以便绕过批量赋值保护。我想知道为什么下面这行代码不能工作(它创建了"can't stringify key“错误):

代码语言:javascript
复制
@user.attributes=({ :name => "James Bond", :admin => true }, false)

...but这样做:

代码语言:javascript
复制
@user.send(:attributes=, { :name => "James Bond", :admin => true }, false)

有人知道原因吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-06-04 17:04:34

因为Ruby解析器将'{ :name => "James Bond", :admin => true}, false‘解析为#attributes=的单个参数。调用方法'foo=‘会限制你在Ruby语言中只能使用一个参数。send可以绕过这一点。

实际发生的情况是,Rails试图将false的键串化,因为它是FalseClass而不是Hash,没有任何键。

票数 6
EN

Stack Overflow用户

发布于 2009-08-31 08:12:06

我想看看你们是否会跟进这个问题,所以我必须使用.send,或者是否有更好的方法?

票数 1
EN

Stack Overflow用户

发布于 2011-01-08 02:36:25

最后,我定义了一些帮助器方法,使绕过大量赋值限制变得更容易。

代码语言:javascript
复制
module ActiveRecord
  class Base

    # Assigns attributes while ignoring mass assignment protection
    def force_feed(attributes)
      self.send(:attributes=, attributes, false)
      self
    end

  end
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/951820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档