【问题标题】:Ruby on Rails Tutorial( by Hartl) when doing name = Faker::Name.name encoutner Can't mass-assign protected attributes errorRuby on Rails 教程(由 Hartl 编写)当 name = Faker::Name.name encoutner Can't mass-assign protected attributes 错误
【发布时间】:2012-04-17 06:04:42
【问题描述】:

更新:我在 Ruby 1.8 上运行。存储库的链接是 github.com/lauherk/sample_app

我正在阅读 Micheal hartl 的 Ruby on Rails 教程,在第 9 章中,我遇到了使用示例用户 http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-users?version=3.2#sec:sample_users 填充数据库的问题

我的 rake 代码是:

namespace :db do
  desc "Fill database with sample data"
  task populate: :environment do
    User.create!(:name => "Example User",
                 :email => "example@railstutorial.org",
                 :password => "foobar",
                 :password_confirmation => "foobar")
    99.times do |n|
      name  = Faker::Name.name
      email = "example-#{n+1}@railstutorial.org"
      password  = "password"
      User.create!(:name => name,
                   :email => email,
                   :password => password,
                   :password_confirmation => password)
    end
  end
end

同时运行后:

bundle exec rake db:reset
bundle exec rake db:populate

我从命令行收到以下错误:

rake aborted!
Can't mass-assign protected attributes: Lawrence Kertzmann
/Library/Ruby/Gems/1.8/gems/activemodel-3.2.2/lib/active_model/mass_assignment_security/sanitizer.rb:48:in `process_removed_attributes'

(每次我运行 rake 时,这个特定的名称都会改变)

我已经检查并确保在我的用户模型中我有代码

attr_accessible :name, :email, :password, :password_confirmation

甚至尝试过设置

  config.active_record.whitelist_attributes = false

然而,在命令行中仍然有相同的结果。

有什么技巧可以让我的数据库中填充示例用户吗?

非常感谢。

【问题讨论】:

  • 我将您的代码放入了我的 rake 任务中,并且它有效。 “示例用户”的创建没有错误。它似乎已经根据错误中的名称进入循环。另一方面,错误表明它试图设置的属性是“Lawrence Kertzmann”而不是“名称”或其他一些属性......
  • 您使用的是 Ruby 1.9 吗?您正在使用新的 Ruby 1.9 哈希语法。
  • 是的,它仍然无法给出错误“无法批量分配受保护的属性:Lawrence Kertzmann”
  • 克隆了我的 repo 并将代码转换为与 Ruby 1.8.7 兼容,并且您的上述代码可以正常工作。
  • 你的代码在 github 上吗?如果有,它的链接是什么?

标签: ruby-on-rails database railstutorial.org attr-accessible


【解决方案1】:

添加

attr_accessible :name

到模型。目前,您只有 :user_name(和其他值)可访问。

【讨论】:

  • 谢谢!我意识到在更新模型时我忘记在 rake 任务中反映这一点。
【解决方案2】:

只需将 authentication_token 添加到 attr_accessible 例如:我得到的错误

Media1s-Mac-mini:rails_apps media1$ rake clipsfree_import RAILS_ENV=发展 csvfile=/Users/media1/Desktop/clips/atemp5/demotracks2/import.csv rake 中止!无法批量分配受保护的属性:标题 /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activemodel-3.2.11/lib/active_model/mass_assignment_security/sanitizer.rb:48:in process_removed_attributes' /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activemodel-3.2.11/lib/active_model/mass_assignment_security/sanitizer.rb:20:indebug_protected_attribute_removal' /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activemodel-3.2.11/lib/active_model/mass_assignment_security/sanitizer.rb:12:in 消毒' /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activemodel-3.2.11/lib/active_model/mass_assignment_security.rb:230:insanitize_for_mass_assignment' /usr/local/rvm/gems/ruby-1.9。 3-p194/gems/activerecord-3.2.11/lib/active_record/attribute_assignment.rb:75:in 分配属性' /usr/local/rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.11/lib/active_record/base.rb:497:ininitialize' /Users/media1/Desktop/rails_apps/lib/tasks/clipsfree_import.rake:14:in 新的' /Users/media1/Desktop/rails_apps/lib/tasks/clipsfree_import.rake:14:inblock (2 级)在 ' /Users/media1/Desktop/rails_apps/lib/tasks/clipsfree_import.rake:5:in 每个' /Users/media1/Desktop/rails_apps/lib/tasks/clipsfree_import.rake:5:inblock in ' 任务:TOP => clipsfree_import(通过运行任务查看完整跟踪 与 --trace)

解决方案:在models文件夹的loopsfree.rb中的attr_accessible中添加属性title

class Loopsfree < ActiveRecord::Base attr_accessible :ISRC, :title, :artist, :bpm, :file_name, :genre, :id, :sub_genre end

希望这会有所帮助 :) 编码愉快

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多