我目前正在阅读 Rails 3 In Action。这本书创建了一个应用程序,可以在其中创建项目,并且可以为每个项目创建票证。它创建了 3 个模型:
项目:
class Project < ActiveRecord::Base
attr_accessible :name
validates :name, presence: true
has_many :tickets, :dependent => :destroy
end
票:
class Ticket < ActiveRecord::Base
belongs_to :project
belongs_to :user
attr_accessible :description, :title
validates :title, presence: true
validates :description, presence: true, :length => { :minimum => 10 }
end
和用户:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :password_confirmation, :remember_me
end
现在,当我将以下行添加到 ticket_controller 中的创建操作时:
@ticket = @project.tickets.build(params[:ticket].merge!(:user => current_user))
我得到这个错误Can't mass-assign protected attributes: user
。现在我真的不明白什么是合并!正在做什么以及为什么 :user 被传入或为什么我收到错误。我知道通常我必须将 mass-assignment 属性包含到 attr_accessible: 方法中。但是这次属性是一个类,所以我不知道如何处理。
帮助,迈克