2011-05-31 12 views
15

मेरे पास जेनरेट मचान के साथ उत्पन्न दो मॉडल हैं, एक लॉगबुक है और दूसरा LogEntry है। मैं लॉगबुक शो पेज पर LogEntry के लिए आंशिक रूप से प्रपत्र प्रस्तुत करना चाहता हूं।एक अलग नियंत्रक (आंशिक नहीं) में आंशिक रूप से प्रस्तुत करें

undefined method `model_name' for NilClass:Class 

मुझे लगता है ऐसा इसलिए है क्योंकि डिफ़ॉल्ट _form एक उदाहरण चर जो जब एक अलग नियंत्रक से कहा जाता है मौजूद नहीं है का उपयोग करता है: जब मैं आंशिक पर प्रस्तुत करना फोन मैं इस त्रुटि मिलती है। इसलिए मैंने स्थानीय चर का उपयोग करने के लिए LogEntry _form.html.erb को परिवर्तित करने का प्रयास किया और उन्हें रेंडर कॉल के माध्यम से पारित किया।

Model LogEntry does not respond to Text 

कैसे मैं इस शो पेज में इस आंशिक शामिल कर सकते हैं एक अलग नियंत्रक के रूप में: यह यहाँ के बाद त्रुटि है?

मॉडल:

class LogBook < ActiveRecord::Base 
    belongs_to :User 
    has_many :LogEntries, :dependent => :destroy 
end 

class LogEntry < ActiveRecord::Base 
    belongs_to :LogBook, :class_name => "log_book", :foreign_key => "log_book_id" 
end 

LogEntry _form.html.erb (स्थानीय चर का उपयोग कर):

<%= form_for(log_entry) do |f| %> 
    <% if log_entry.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(log_entry.errors.count, "error") %> prohibited this log_entry from being saved:</h2> 

     <ul> 
     <% log_entry.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :Text %><br /> 
    <%= f.text_field :Text %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

कार्यपंजी show.html.erb:

<p id="notice"><%= notice %></p> 

<p> 
    <b>Name:</b> 
    <%= @log_book.name %> 
</p> 

<%= render 'log_entries/form', :log_entry => @log_book.LogEntries.new %> 



<%= link_to 'Edit', edit_log_book_path(@log_book) %> | 
<%= link_to 'Back', log_books_path %> 

उत्तर

36

आप जब तक आप दे यह दृश्य फ़ोल्डर से पथ है चाहता हूँ जो कुछ भी आंशिक प्रदान कर सकते हैं:

<%= render :partial => '/log_entries/form', :log_entry => @log_book.log_entries.build %> 

आपका पथ जाने के लिए रेल क्या आप जानते हैं दृश्य फ़ोल्डर में रिश्तेदार हैं/एक से आरंभ होने चाहिए ।

अन्यथा यह आपके वर्तमान फ़ोल्डर के सापेक्ष माना जाता है।

एक साइडेनोट के रूप में, आंशिक रूप से इंस्टेंस चर का उपयोग करने से बचने के लिए यह अच्छा अभ्यास है, आपने इसे ठीक किया है।

बस देखा है कि आप अपने के आंशिक रूप में एक त्रुटि है:

:Text 

अपने मॉडल का एक मान्य स्तंभ नाम नहीं होना चाहिए। आज़माएं: पाठ

+0

यह था: पाठ त्रुटि जो समस्या पैदा कर रही थी, धन्यवाद! – vfilby

+0

@ फॉर्म सबमिट होने पर @neneadiving, लॉग प्रविष्टि नियंत्रक का उपयोग किया जाएगा? – BKSpurgeon

2

प्रस्तुत करना स्विच करने का प्रयास विधि निम्नानुसार है:

<%= render :partial => 'log_entries/form', :log_entry => @log_book.LogEntries.new %> 

ऑब्जेक्ट के आवृत्ति चर को पार करते समय केवल कार्यों को प्रस्तुत करना। हालांकि, चूंकि आप एक फ़ाइल निर्दिष्ट कर रहे हैं, तो विकल्प का उपयोग करना सबसे अच्छा है।

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