2015-03-19 5 views
5

मेरे पास एक RoR ऐप में एक सबमिटिंग फॉर्म है, जो simple_form के साथ बनाया गया है। जब फ़ील्ड रिक्त होते हैं, तब भी ऐप किसी भी त्रुटि या चेतावनी को संकेत दिए बिना अगले चरण पर जाता है। फ़ील्ड डिफ़ॉल्ट रूप से required: true होना चाहिए; लेकिन इसे मैन्युअल रूप से लिखना भी काम नहीं करता है।सरल_फॉर्म आवश्यक फ़ील्ड काम नहीं करता है - रेल पर रूबी

ऐप में 3 चरण हैं: न्यूपोस्ट (नया दृश्य) -> पूर्वावलोकन (दृश्य बनाएं) -> पोस्ट करें।

def new 
    @post= Post.new 
end 

def create 
    @post = Post.new(params.require(:post).permit(:title, :category_id)) 

    if params[:previewButt] == "Continue to Preview your Post" 
     render :create 
    elsif params[:createButt] == "OK! Continue to Post it" 
     if @post.save! 
     redirect_to root_path 
     else 
     render :new 
     end 
    elsif params[:backButt] == "Make changes" 
     render :new 
    end 
    end 

मेरे न्यू दृश्य (उद्धरण):

यह मेरी नियंत्रक और विचारों का एक उद्धरण के साथ और अधिक स्पष्ट हो जाएगा

<%= simple_form_for @post do |form| %> 
<%= form.input :title, input_html: { class: 'post-title-input' }, label: false, hint: '"Your post title"' %> 
<%= form.collection_radio_buttons(:category_id, Category.all, :id, :name, :item_wrapper_class => "selectable") %> 
<%= form.button :submit , name: "previewButt", value: "Continue to Preview your Post", class: "btn btn-lg btn-primary btn-preview" %> 
<% end %> 

मेरे (उद्धरण) दृश्य बनाएँ:

<%= simple_form_for @post do |form| %> 
<%= form.hidden_field :title, {:value => @post.title} %> 
<%= form.hidden_field :category_id, {:value => @post.category_id} %> 
<% end %> 

एन ote कि समस्या सहेजते समय नहीं है, मॉडल परिभाषा ठीक काम करती है, समस्या केवल simple_form में है।

class Post < ActiveRecord::Base 
    belongs_to :category 
    validates :title, presence: true 
    validates :category_id, presence: true 
end 

समाधानDickieBoy संकेत करने के लिए धन्यवाद:

बदलें करने के लिए नियंत्रक:

 def create 
     @post = Post.new(params.require(:post).permit(:title, :category_id)) 

     if params[:previewButt] == "Continue to Preview your Post" 
      if @post.valid? 
       render :create 
      else 
       render :new 
     elsif params[:createButt] == "OK! Continue to Post it" 
      if @post.save! 
      redirect_to root_path 
      else 
      render :new 
      end 
     elsif params[:backButt] == "Make changes" 
      render :new 
     end 
     end 

उत्तर

1

इसके बनाने के दृश्य पर जाकर क्योंकि आप इसे किसी भी अलग नहीं बताया।

@post = Post.new(params.require(:post).permit(:title, :category_id))

रूप है जो खाली हैं से दिए गए मापदंडों के साथ Post का एक नया उदाहरण बनाता है। नया कॉल सत्यापन के मामले में कुछ भी नहीं करता है। आप कुछ ऐसा चाहते हैं:

@post = Post.new(params.require(:post).permit(:title, :category_id)) 

if @post.valid? && params[:previewButt] == "Continue to Preview your Post" 
.... 
15

सरल_फॉर्म प्रारंभकर्ता में एक सेटिंग है जो क्लाइंट साइड सत्यापन को सक्रिय करती है। चाहे क्लाइंट साइड सत्यापन, आपको सर्वर साइड सत्यापन भी रखना है (आप वर्तमान में क्या कर रहे हैं)।

config/initializers/simple_form.rb

config.browser_validations = true 
: simple_form का उपयोग कर ग्राहक साइड सत्यापन को लागू करने के लिए, निम्न कार्य करें
संबंधित मुद्दे