2009-08-13 23 views
11

के साथ मैं कुछ हद तक रेल की नौसिखिया हूं। मैं एक कॉचरेस्ट-रेल ऐप लिख रहा हूं, इसलिए इस मॉडल के लिए एक्टिव्रेकॉर्ड का उपयोग नहीं कर रहा हूं। मैं सिर्फ पता लगा इसका मतलब है कि किरेल फॉर्म_टैग फॉर्म लेखन - गैर-सक्रिय रिकॉर्ड मॉडल

form_for(@model) 

काम नहीं करेगा। मैं form_tag का उपयोग करने के तरीके को जानने का प्रयास कर रहा हूं - लेकिन अधिकांश उदाहरणों में नए & क्रियाएं शामिल नहीं हैं।

यह गलत है:

Scenario: Create Valid Article       # features/article.feature:16 
    Given I have no articles        # features/step_definitions /article_steps.rb:8 
    And I am on the list of articles      # features/step_definitions/webrat_steps.rb:6 
/home/deploy/www/www.trackingplace.com/app/ccc/app/views/articles/new.html.erb:3: warning: multiple values for a block parameter (0 for 1) 
from /usr/local/lib/ruby/gems/1.8/gems/actionpack-2.3.3/lib/action_view/helpers/capture_helper.rb:36 
When I follow "New Article"        # features/step_definitions/webrat_steps.rb:18 
    You have a nil object when you didn't expect it! 
    The error occurred while evaluating nil.error_messages (ActionView::TemplateError) 
    features/article.feature:19:in `When I follow "New Article"' 

लेकिन मैं त्रुटि समझ में नहीं आता है, या यह कैसे तय करने के लिए:

<h1>New article</h1> 

<% form_tag new_article_url(@article), :method => :post do |f| %> 
    <%= f.error_messages %> 

    <p> 
    <%= f.label :title %><br /> 
    <%= f.text_field :title %> 
    </p> 
    <p> 
    <%= f.submit 'Create' %> 
    </p> 
<% end %> 

<%= link_to 'Back', articles_path %> 

क्योंकि जब मैं अपने ककड़ी परिदृश्य चलाने के लिए, मैं इस मिलता है।

उत्तर

16

form_tag विधि फॉर्म निर्माता का उपयोग नहीं करती है, इसलिए आप फॉर्म ब्लॉक में "एफ" चर का उपयोग नहीं कर सकते हैं। f.error_messages के बजाय आप error_messages_for उपयोग करने के लिए, आदि

<% form_tag new_article_url(@article), :method => :post do %> 
    <%= error_messages_for :article %> 

    <p> 
    <%= label :article, :title %><br /> 
    <%= text_field :article, :title %> 
    </p> 
    <p> 
    <%= submit_tag 'Create' %> 
    </p> 
<% end %> 

कहा कि, आप गैर ActiveRecord वस्तुओं के साथ form_for उपयोग कर सकते हैं, वे तो बस कुछ तरीकों के लिए प्रतिक्रिया करने की जरूरत है। सुनिश्चित करें कि ये विधियां अनुच्छेद मॉडल में लागू की गई हैं।

  • id
  • new_record?
  • to_param
  • errors

सिर्फ एक अनुमान है कि के रूप में क्या जरूरत है, वहाँ दूसरों हो सकता है। यदि इन्हें कार्यान्वित किया जाता है और ActiveRecord की तरह व्यवहार करता है तो क्या आपको form_for का उपयोग करने में सक्षम होना चाहिए।

+0

धन्यवाद रयान। यदि मैं अपने मॉडल के लिए form_for के लिए समर्थन जोड़ने का निर्णय लेता हूं - आवश्यक तरीकों के पूर्ण सेट की पुष्टि करने के तरीके पर कोई सुझाव? –

+0

मुझे आवश्यक विधियों के "पूर्ण" सेट को निर्धारित करने के लिए रेल 2 में किसी तरीके से नहीं पता है। यदि आप कुछ परीक्षण करते हैं और method_missing त्रुटियां नहीं प्राप्त करते हैं तो यह शायद अच्छा है। रेल 3 इस करने के लिए एक दस्तावेज तरीका पेश करेगा और मॉडल में परिभाषित करने के लिए आपके लिए एक स्थापित इंटरफ़ेस प्रदान करेगा। – ryanb

+0

ठीक है - अब मैं यह समझने के लिए बहुत लंगड़ा हूं कि फॉर्म मानों का उपयोग कैसे करें! मेरे नियंत्रक में मेरे पास है: डीफ़ @article = Article.new (शीर्षक => पैराम्स [: आलेख]) लेकिन यह काम नहीं करता है। जब मैं क्लास को प्रारंभ करने के लिए इसे आंतरिक रूप से उपयोग करने का प्रयास करता हूं तो मुझे निम्न मिलता है: और मैं "बनाएं" # विशेषताएं/step_definitions/webrat_steps.rb दबाएं: 14 {शीर्षक "=>" स्पड "के लिए अपरिभाषित विधि 'डाउनकेस' }: हैशविथ इंडिफेंजरएप (NoMethodError) कोई सुराग? –

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