mass_assignment_authorizer 的更改导致 Ruby on Rails 3.1 中的错误

Posted

技术标签:

【中文标题】mass_assignment_authorizer 的更改导致 Ruby on Rails 3.1 中的错误【英文标题】:Changes to mass_assignment_authorizer cause errors in Ruby on Rails 3.1 【发布时间】:2011-10-12 01:20:13 【问题描述】:

像 railscast 中那样防止批量分配在 Rails 3.1 中不再有效。

给出的错误是:

参数数量错误(1 比 0)

app/models/user.rb:20:in `mass_assignment_authorizer'

【问题讨论】:

给 mass_assignment_authorizer 一个虚拟参数可以让它再次工作,但远非理想。 【参考方案1】:

从源代码看来,至少在 master 中,mass_assignment_authorizer 有一个默认选项 :default,如 here 所示。

您使用的是哪个版本的 rails 3.1?,通过更改您的 Gemfile 可能值得尝试一下:

gem 'rails', :git => 'git@github.com:rails/rails.git'

【讨论】:

目前正在使用rc4,我会试试你的建议。 你的建议有同样的问题,我不认为 :default 被定义了。【参考方案2】:

如果您尝试在 Ryan's Railcasts 中实现覆盖技术,但使用的是 Rails 3.1.0,则将模型中的私有 def 重写为:

def mass_assignment_authorizer(role = :default)
 super + (accessible || [])
end

我发现这清除了

wrong number of arguments (1 for 0)

上面的错误(即只是添加(角色=:默认),也与上面的答案相关

【讨论】:

以上是关于mass_assignment_authorizer 的更改导致 Ruby on Rails 3.1 中的错误的主要内容,如果未能解决你的问题,请参考以下文章