2009-07-27 71 views
1

我有一個對象任務像這樣在2驗證錯誤消息相關聯的對象結果的驗證

has_many :notes, :validate => true 

而且一個模型與這樣的模型:

belongs_to :task 
    validates_presence_of :body, :message => "cannot be empty, bonehead!" 

我有一個/任務/新視圖來創建一個新的任務(形式_for)和一個筆記(字段_for)。我希望任務和註釋的驗證失敗消息在表單頂部吐出。

控制器看起來像:

def create 
    @task = Task.new(params[:task]) 
    @note = Note.new(params[:note]) 
    @task.notes << @note 
    if @task.save 
     redirect_to tasks_path 
    else 
     render :action => 'new' 
    end 

的問題是,當沒有注意身體輸入驗證錯誤在@note返回的消息,「身體不能爲空,笨蛋」;另一個在@task中,「註釋無效」。

我隨地吐痰既出這樣的觀點:

<%= error_messages_for 'task', 'note', 'users_list', :header_message => nil, :message => nil %> 

我想保持注模型驗證消息,而不是有一個作爲工作對象,「不是無效」的一部分。

非常感謝!

回答

2

我沒有在我面前的控制檯,但我認爲如果您將if語句更改爲if @note.valid? and @task.save,它會首先檢查註釋,並只給您第一條消息。

編輯:這只是一種一個供參考,但您可能需要使用build,而不是兩個new聲明:

def create 
    @task = Task.new(params[:task]) 
    @note = @task.notes.build(params[:note]) 
    if @task.save 
    ... 
+0

共贏! 謝謝您的幫助先生。 – doctororange 2009-07-28 01:18:12