2011-09-05 74 views
0

我有兩個模型,Character和Initiative,他們的關係是Character has_one Initiative和Initiative belogns_to Character。我正在爲Initiative進行驗證,並且已經開始工作,但是在輸入任何信息之前,爲Character創建新的Initiative記錄時出現所有驗證錯誤。有任何想法嗎?下面是從倡議控制器我的代碼:在Rails中提交信息之前出現驗證錯誤?

def new 
    @character = Character.find(params[:character_id]) 
    @initiative = @character.create_initiative(params[:initiative]) 
end 

def edit 
    @character = Character.find(params[:character_id]) 
    @initiative = @character.initiative 
end 

def create 
@character = Character.find(params[:character_id]) 
@initiative = @character.create_initiative(params[:initiative]) 
    if @initiative.save 
    redirect_to character_path(@character), :notice => "initiative successfully created!" 
else 
    render :action => "new" 
    end 
end 

def update 
    @character = Character.find(params[:character_id]) 
    @initiative = @character.initiative 
    if @initiative.update_attributes(params[:initiative]) 
    redirect_to character_path(@character), :notice => 'Initiative information was  successfully updated.' 
else 
    render :action => "edit" 
    end 
end 

,這裏是驗證自己從我的模型:

validates_presence_of :dex, :misc, :speed 
validates_numericality_of :dex, :misc, :speed 

我敢肯定問題出在創建或新的方法,但我不確定爲什麼它會在用戶輸入任何信息之前觸發驗證。任何幫助?也許不是一個大問題,因爲代碼正在工作,但我寧願在實際出現錯誤之前不顯示錯誤消息。謝謝!

+0

'validate'肯定會被調用。問題在哪裏。 'new.html.erb'中有什麼?在模型中添加一個'before_validate',看看它是否被調用並從哪裏調用。也許'new'中的'create_initiative'導致驗證 – Zabba

+0

你是對的,'create_initiative'確實調用驗證。請參閱我答案中的鏈接。 –

回答

1

你不應該在你的新動作中使用build_initiative而不是create_initiative嗎?在向用戶發送打算創建對象的表單時,無需保存對象。而且,如果你的角色有主動性,他只能擁有一個,所以我懷疑AR讚賞你試圖創造另一個。

請參閱http://guides.rubyonrails.org/association_basics.html#has_one-association-reference

+0

感謝您的回答。在新行動中使用create_initiative而不是build_initiative是罪魁禍首。我不太瞭解兩者之間的差異,但您提供的鏈接有所幫助。 – illbzo1