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 中的错误的主要内容,如果未能解决你的问题,请参考以下文章