2013-08-08 19 views
17

मैं वर्तमान में खुद को कुछ आरओआर पढ़ रहा हूं और ट्यूटोरियल कर रहा हूं, लेकिन बूटस्ट्रैप के साथ कुछ अच्छे लेआउट और सामान जोड़ रहा हूं और मैं एक समस्या में भाग रहा हूं जो मैं नहीं कर सकता अंदाजा लगाओ।"शून्य के लिए अपरिभाषित विधि 'त्रुटियां: नील क्लास" त्रुटियों की विधि पर कॉल करते समय

मैं सत्यापन हिस्सा (http://guides.rubyonrails.org/getting_started.html#adding-some-validation) करने के लिए कोशिश कर रहा हूँ, लेकिन जब मैं का उपयोग करें:

undefined method `errors' for nil:NilClass 
Extracted source (around line #9): 
<legend><h1>Add Post</h1></legend> 

<%= form_for :post, url: posts_path, html: {class: 'form-horizontal'} do |f| %> 
     <% if @post.errors.any? %> 
     <div id="errorExplanation"> 

कुछ भी नहीं काम करता है और मैं भी नकल की और भागों चिपकाया:

<% @post.errors.any? %> 

मैं यह संदेश प्राप्त ट्यूटोरियल से।

<p> </p> 

<div class="span6" 

<fieldset> 
    <legend><h1>Add Post</h1></legend> 

    <%= form_for :post, url: posts_path, html: {class: 'form-horizontal'} do |f| %> 
      <% if @post.errors.any? %> 
      <div id="errorExplanation"> 

       <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2> 

       <ul> 
        <% @post.errors.full_messages.each do |msg| %> 
        <li><%= msg %></li> 
        <% end %> 
        </ul> 
      </div> 
    <% end %> 
     <div class="control-group"> 
      <%= f.label :title, :class => 'control-label' %> 
      <div class="controls"> 
       <%= f.text_field :title, :class => 'span4' %> 
      </div> 
     </div> 

     <div class="control-group"> 
      <%= f.label :content, :class => 'control-label' %> 
      <div class="controls"> 
       <%= f.text_area :content, :rows => '7', :class => 'input-block-level' %> 
      </div> 
     </div> 

     <div class="form-actions"> 
      <%= f.submit "Add Post", :class => 'btn btn-success' %> 
      <%= link_to "Cancel", posts_path, :class => 'btn', :style => 'float:right;' %> 
     </div> 
    <% end %> 
</fieldset> 

</div> 

और मेरे posts_controller:

class PostsController < ApplicationController 

    def new 
    end 

    def create 
     @post = Post.new(params[:post].permit(:title, :content)) 

     if @post.save 
      redirect_to @post 
     else 
      render 'new' 
     end 
    end 

    def show 
     @post = Post.find(params[:id]) 
    end 

    def index 
     @posts = Post.order("created_at desc") 
    end 

    private 
     def post_params 
      params.require(:post).permit(:title, :content) 
     end 

end 

मैं क्या याद आ रही है

यहाँ देखने के लिए कोड है? अग्रिम में धन्यवाद!

उत्तर

51

आपको क्रिया में @post को परिभाषित करने की आवश्यकता है।

def new 
    @post = Post.new 
end 

आप NilClass त्रुटि हो रही है क्योंकि @post कोई मूल्य नहीं (यह nil है) जब आप पहली बार new कार्रवाई पर प्रपत्र लोड है।

क्योंकि यह @post आप create के शीर्ष पर परिभाषित किया है उपयोग कर रहा है जब आप अपने create कार्रवाई में render :new कर वहाँ कोई समस्या नहीं है।

+0

@Deefour हाय। मैं वही ट्यूटोरियल कर रहा हूं और '5.12 पोस्ट अपडेट कर रहा हूं 'में एक ही त्रुटि प्राप्त कर रहा हूं। '@ पोस्ट' चर को नई विधि में परिभाषित किया गया है और यह इस त्रुटि को फेंकता रहता है। क्या तुम मेरी मदद कर सकते हो? – Demnogonis

+0

मुझे एक ही समस्या थी। यह वास्तव में भ्रमित है क्योंकि ट्यूटोरियल के ऊपरी भाग में स्पष्ट रूप से उल्लेख नहीं किया गया है कि किसी को नई कार्रवाई में लिखना चाहिए। – DennyHiu

1

कोड के नीचे दिए गए टुकड़े के साथ posts.controller.rb फ़ाइल में निर्माण विधि अद्यतन करें। यह मेरे लिए काम किया।

def create 
    @post = Post.new(params[:post].permit(:title, :text)) 
    @post.save 
    redirect_to @post 
end 
संबंधित मुद्दे

 संबंधित मुद्दे