2012-05-23 42 views
0

我正在閱讀Rails 3 In Action。這本書創建了一個應用程序,可以創建項目,併爲每個項目創建票證。它創建3種型號:一行Ruby代碼,我不明白,給我一個大規模分配錯誤

項目:

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 

現在,當我下面的行添加到裏面創建行動tickets_controller:

@ticket = @project.tickets.build(params[:ticket].merge!(:user => current_user)) 

我收到此錯誤Can't mass-assign protected attributes: user。現在我不明白什麼合併!正在做,爲什麼:用戶被傳入或爲什麼我得到錯誤。我知道通常我必須將mass-assignment屬性包含在attr_accessible:方法中。但是這次屬性是一個類,所以我不知道如何處理這個問題。

幫助, 邁克

+0

他是新的。給他休息一下 – ctilley79

回答

0
@ticket = @project.tickets.build(params[:ticket]) 
@ticket.user = current_user 

除非有就是爲什麼你需要這在一行理由嗎?在這種情況下,也許

@ticket = @project.tickets.build(params[:ticket].merge!(:user_id => current_user.id)) 
+0

好點。沒有必要通過構建 –

+0

Thanx Pasted的用戶,該工程(2線解決方案)。但我還有一個問題。在票內我有'belongs_to:項目'和'belongs_to:用戶'。然後在項目裏面我有一個相應的'has_many:tickets',但是裏面的用戶沒有相應的'has_many:tickets'這是這本書的一個疏忽?我知道這個版本有很多印刷錯誤。 – mikeglaz

+0

User模型看起來像是由Devise生成的默認模型 - 它不包含任何關聯。不知道您是否可以在生成器中指定任何關聯,但通常我只是稍後將這些關聯添加到用戶模型中。 – Pasted