2011-05-17 61 views
0

我有一個問題型號:驗證上的has_many關係Rails3中

class Question < ActiveRecord::Base 
    has_many :answers, :dependent => :destroy 

,有許多答案:

class Answer < ActiveRecord::Base 
    belongs_to :question, :counter_cache => true 
    validates :body, 
      :presence => true, 
      :length => {:minimum => 3, :maximum => 4096} 

我有一個問題頁面下一個形式,這樣我就可以提交答案。

問題是,我創建一個新的答案後,我重新回到問題,所以我看不到任何驗證錯誤。

有沒有人知道如何看問題頁面上的答案驗證錯誤?

這是意見/問題/ show.html.erb

<%= render :partial => @answers %> 

<%= form_for [@question, Answer.new] do |f| %> 

    <div class="formline"> 
    <div class="formlabelcenter"><%= f.label :body, "New Answer" %></div> 
    <div class="formfield"> <%= f.text_area :body, :class => "mceEditor" %></div> 
    </div> 

    <div class="formline"> 
    <div class="submit"> 
    <%= f.submit "Add Answer" %></div> 
    </div> 
<% end %> 

當我嘗試以使其得到我的問題:

http://0.0.0.0:3000/questions/question-name/answers 

,而不是

http://0.0.0.0:3000/questions/question-name 
+0

您是在發佈答案或僅渲染同一頁面後重定向的?如果您要渲染相同的頁面,無論您在視圖中使用什麼方法來顯示錯誤,都應該顯示它們。分享您的視圖代碼? – Jimmy 2011-05-17 17:32:33

+0

當我使用渲染時,它會得到給定問題的答案url。 – Sharethefun 2011-05-17 18:10:18

回答

1

你有什麼顯示顯示的問題形式在您的視圖代碼中的錯誤,試試這個(注意Answer.new的變化@answer,所以這將顯示在控制器驗證失敗,同型號)

<%= form_for [@question, @answer || Answer.new] do |f| %> 
    <% if @answer && @answer.errors.any? %> 
    <div class='errors'> 
     <h2> 
     <%= pluralize(@answer.errors.count, "error") %> 
     prohibited this user from being saved: 
     </h2> 
     <ul> 
     <% @answer.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 
    <% # your view code here %> 
<% end %> 
+0

嗨吉米! 我得到未定義的方法錯誤爲零:NilClass作爲@answer是零。 我沒有包含任何顯示錯誤,因爲它包含在我的佈局中。 如果我只是添加<%= form_for [@question,@answer || Answer.new] do | f | %>表單完全一樣的東西,它讓我到http://0.0.0.0:3000/questions/question-name/answers謝謝 – Sharethefun 2011-05-17 19:00:23

+0

你需要添加'@answer = Answer.new'到控制器方法顯示問題,也會在錯誤顯示中看到修復更新 – Jimmy 2011-05-17 19:03:53

+0

我添加了@answer = Answer.new,當我嘗試添加新的答案時,它會讓我到0.0.0.0:3000/questions/question-名稱/答案 :( – Sharethefun 2011-05-17 19:11:29

0

在控制器中檢測到錯誤時,將其消息存儲在flash[:error]中。然後,在視圖中,檢查flash哈希中是否存在:error。如果存在,請將其顯示爲錯誤消息。

+0

Flash消息的樣式是綠色的。我希望以與其他模型上顯示的相同方式顯示所有錯誤以保持一致性。我已經試過,但無論如何感謝:) – Sharethefun 2011-05-17 18:05:07

+0

造型是由你決定的。您可以使用顯示用於表單的相同錯誤。只要看看它是如何設置在腳手架。 – Mario 2011-05-17 18:12:03

+0

嗨馬里奧, 如果我改變這一點,那麼在其他模型上的所有其他Flash消息將顯示爲驗證錯誤,我不希望這樣。謝謝:) – Sharethefun 2011-05-17 19:01:28