2009-11-25 14 views
6

कभी-कभी हमें मॉडल निर्माण के बिना फ़ॉर्म की आवश्यकता होती है - उदाहरण के लिए खोज फ़ील्ड या ईमेल, जहां कुछ निर्देश भेजना चाहिए। इस रूपों को बनाने का सबसे अच्छा तरीका क्या है? क्या मैं वर्चुअल मॉडल या ऐसा कुछ बना सकता हूं? मैं फॉर्मेटास्टिक का उपयोग करना चाहता हूं, लेकिन form_tag नहीं।आभासी मॉडल और form_for (या formtastic)

उत्तर

18

सबसे पहले, फॉर्मटास्टिक को सभी मामलों में एक मॉडल की आवश्यकता नहीं है, हालांकि यह निश्चित रूप से सर्वोत्तम काम करता है और मॉडल के साथ कम कोड की आवश्यकता होती है।

रेल के स्वयं के निर्मित form_for की तरह, आप किसी ऑब्जेक्ट के बजाय पहले तर्क के रूप में एक प्रतीक में गुजर सकते हैं, और फॉर्मटास्टिक फॉर्म का निर्माण करेगा और प्रतीक के आधार पर पैराम पोस्ट करेगा। उदाहरण के लिए:

<% semantic_form_for(:session) do |f| %> 
    ... 
<% end %> 

यह फार्म मूल्यों params[:session] के रूप में अपने नियंत्रक को उपलब्ध कराएगा।

दूसरा, मॉडल का मतलब ActiveRecord मॉडल नहीं है। मेरा मतलब है, फॉर्मटास्टिक एक कक्षा के किसी भी उदाहरण के साथ काम करेगा जो quacks ActiveRecord मॉडल की तरह होगा।

इस का एक उत्कृष्ट उदाहरण कई लोग फॉर्मेटैस्टिक के साथ प्रमाणीकरण के लिए ऑथलॉगिक का उपयोग कर रहे हैं। Authlogic का एक हिस्सा एक UserSession मॉडल है, जो ठीक काम करता है का विचार है:

नियंत्रक:

def index 
    @user_session = UserSession.new 
end 

प्रपत्र:

<% semantic_form_for(@user_session) do |f| %> 
    <%= f.input :login %> 
    <%= f.input :password %> 
<% end %> 

यह params[:user_session] के रूप में अपने नियंत्रक में अपने प्रपत्र डेटा उपलब्ध करवाएगा।

यह वास्तव में आपके मॉडल की चिंताओं को लपेटने के लिए मॉडल उदाहरण बनाने में मुश्किल नहीं है। बस विधियों को कार्यान्वित करना जारी रखें जब तक कि आप इसे काम नहीं कर लेते हैं!

+1

मैं आपकी चुनौती स्वीकार करता हूं!यहां एक गैर-ActiveRecord क्लास को "अपने मॉडल की चिंताओं को लपेटने" के लिए खोजें। http://dondoh.tumblr.com/post/4142258573/formtastic-without-activerecord – dondo

-1

या आप बस फॉर्म_for के साथ एक फॉर्म बनाते हैं और मॉडल संदर्भ को खाली छोड़ देते हैं। [: Some_attribute] अपने नियंत्रक में उदाहरण <% form_for "", :url=>some_url do |f| %> <%= f.text_field "some_attribute" %> <%= submit_tag "submit" %>

आप मान प्राप्त कर सके बस कह पैरामीटर द्वारा लिए ।

+0

मैं नीचे वोट पर एक टिप्पणी की सराहना करता हूं। – Sid

+1

मैं यह कहूंगा क्योंकि ओपी आदर्श रूप से फॉर्मेटास्टिक का उपयोग करके एक अर्थपूर्ण समाधान की तलाश कर रहा है, और आप पीछे एक कदम का सुझाव दे रहे हैं। –

1

default_language.rb

 
class DefaultLanguage 
    attr_accessor :language_id 
end 

foo_controller.rb

 
    def index 
    @default_language = params[:default_language] || Language.find_by_name("English") 
    end 

index.erb

 
<% semantic_form_for @default_language do |form| %> 
    <% form.inputs :id => 'default_language' do %> 
     <%= form.input :id, 
     :as => :select, 
     :collection => @languages, 
     :required => false, 
     :label => "Primary Language:", 
     :include_blank => false %> 
    <% end %> 
    <% end %> 

मैं प्रपत्र पोस्ट करने के लिए जब मूल्य बदल AJAX के लिए इस्तेमाल किया।

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