2010-09-27 7 views
10

मैं & रेल के लिए मेरी पहली एम्बेडेड प्रपत्र स्थापित करने के लिए कोशिश कर नया हूँ। फ़ॉर्म स्वयं काम करता है, लेकिन मैं यह निर्धारित नहीं कर सकता कि दृश्य में सत्यापन त्रुटि संदेश कैसे भेजना है। मैं मान लिया f.object.errors पहुँच प्रदान होगा, लेकिन, जबकि विधि अस्तित्व के लिए कहा जाता है, f.object.errors.count हमेशा 0, और f.object.errors.any रिटर्न? झूठी वापसी वास्तविक त्रुटि संदेशों को न दिखाने के अलावा, फॉर्म अपेक्षित के रूप में काम कर रहा है - यानी, अमान्य डेटा डालने में विफल रहा है और सत्यापन में विफल होने वाले फॉर्म पर लौट रहा है। मॉडल, नियंत्रक & नीचे सूचीबद्ध देखें - किसी भी मदद की बहुत सराहना की।रेल 3: एम्बेडेड फॉर्म में त्रुटि संदेशों को कैसे प्रदर्शित करें?

... 
<!-- Form embedded in boards/show.html.erb --> 
<%= form_for([@board, @board.boardthreads.build]) do |f| %> 
    <div class="field"> 
     <%= f.label :title %><br /> 
     <%= f.text_field :title %> 
    </div> 
    <div class="field">  
     <div class="actions"> <%= f.submit %> </div> 
    </div> 
<% end %> 
... 



class Boardthread < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :board 

    validates :user, :presence => true 
    validates :board, :presence => true 
    validates :title, :presence => true 
end 


class BoardthreadsController < ApplicationController 
    def create 

     @board = Board.find(params[:board_id]) 
     @boardthread = @board.boardthreads.new(params[:boardthread]) 
     @boardthread.user = current_user 
     @boardthread.save 
     redirect_to board_path(@board) 

    end 
end 

उत्तर

21

यह क्योंकि जब आप विफल रहा है, आप फिर से अपने embedded_form में एक वस्तु का निर्माण है। आपको अपने फॉर्म में विफलता के साथ ऑब्जेक्ट का उपयोग करने की आवश्यकता है।

अपने नए कार्रवाई में आप अपने वस्तु का निर्माण और अपने embedded_form पर इसका इस्तेमाल की जरूरत है। और अपने दौरान बनाते हैं तो आप इसका इस्तेमाल करते हैं, क्योंकि यह पहले से ही जवाब shingara को

<%= form_for([@board, @boardthread]) do |f| %> 
    <% @boardthread.errors.full_messages.each do |msg| %> 
     <p><%= msg %></p> 
    <% end %> 
    <div class="field"> 
     <%= f.label :title %><br /> 
     <%= f.text_field :title %> 
    </div> 
    <div class="field">  
     <div class="actions"> <%= f.submit %> </div> 
    </div> 
<% end %> 
5

इसके अलावा परिभाषित है: तुम भी

<ul> 
    <%- @boardthread.errors.full_messages.each do |msg| %> 
    <li><%= msg %></li> 
    <%- end %> 
</ul>` 
की तरह अपने फ़ॉर्म में त्रुटियाँ प्रदर्शित करने के लिए कोड, someting जोड़ना पड़ सकता है
संबंधित मुद्दे