2010-01-28 19 views
7

समूहीकरण अब Formtastic साथ साथ चयन मैं सादे चयन किया है:Formtastic

= f.input :category, :as => :select, :include_blank => false, :collection => subcategories 

यहाँ मैं केवल बच्चों श्रेणियों दिखा। मैं अभिभावक-बाल संबंधों के लिए कृत्यों_as_tree प्लगइन का उपयोग करता हूं। मैं मूल श्रेणियों को भी दिखाना चाहता हूं।

Formtastic की तरह दिखना चाहिए का चयन उत्पन्न इस एक:

<select name="favoritefood"> 
    <optgroup label="Dairy products"> 
    <option>Cheese</option> 
    <option>Egg</option> 
    </optgroup> 
    <optgroup label="Vegetables"> 
    <option>Cabbage</option> 
    <option>Lettuce</option> 
    <option>Beans</option> 
    <option>Onions</option> 
    <option>Courgettes</option> 
    </optgroup> 
    ⋮ 
</select> 

कैसे acts_as_tree कार्यक्षमता के साथ Formtastic में समूहीकरण मॉडल के लिए चयन उपयोग कैसे करें? क्या कोई जानता है?

UPDATED

मैं पता लगा है कि इस काम करना चाहिए:

= f.input :category, :include_blank => false, :group_by => :parent 

लेकिन यह त्रुटि के साथ नहीं करता है:

undefined local variable or method `object_class' for #<Formtastic::SemanticFormBuilder:0x87d3158> 

ऐसा लगता है कि वहाँ Formtastic में कुछ बग है । मैं formtastic.rb के माध्यम से देखा है और detect_group_association विधि में object_class पाया:

def detect_group_association(method, group_by) 
    object_to_method_reflection = self.reflection_for(method) 
    method_class = object_to_method_reflection.klass 

    method_to_group_association = method_class.reflect_on_association(group_by) 
    group_class = method_to_group_association.klass 

    # This will return in the normal case 
    return method.to_s.pluralize.to_sym if group_class.reflect_on_association(method.to_s.pluralize) 

    # This is for belongs_to associations named differently than their class 
    # form.input :parent, :group_by => :customer 
    # eg. 
    # class Project 
    # belongs_to :parent, :class_name => 'Project', :foreign_key => 'parent_id' 
    # belongs_to :customer 
    # end 
    # class Customer 
    # has_many :projects 
    # end 
    group_method = method_class.to_s.underscore.pluralize.to_sym 
    return group_method if group_class.reflect_on_association(group_method) # :projects 

    # This is for has_many associations named differently than their class 
    # eg. 
    # class Project 
    # belongs_to :parent, :class_name => 'Project', :foreign_key => 'parent_id' 
    # belongs_to :customer 
    # end 
    # class Customer 
    # has_many :tasks, :class_name => 'Project', :foreign_key => 'customer_id' 
    # end 
    possible_associations = group_class.reflect_on_all_associations(:has_many).find_all{|assoc| assoc.klass == object_class} 
    return possible_associations.first.name.to_sym if possible_associations.count == 1 

    raise "Cannot infer group association for #{method} grouped by #{group_by}, there were #{possible_associations.empty? ? 'no' : possible_associations.size} possible associations. Please specify using :group_association" 

    end 

दरअसल इस पद्धति में object_class अपरिभाषित और वहाँ formtastic.rb में इस नाम का कोई निजी तरीका है। लेकिन हम स्पष्ट रूप से एसोसिएशन को परिभाषित करने के लिए का उपयोग कर सकते हैं: group_association

- semantic_form_for ([:manager, @purchase_profile]) do |f| 
    - f.inputs do 
    = f.input :category, :include_blank => false, :group_by => :parent, :group_association => :children 
    = f.buttons 

लेकिन मैं एक और त्रुटि का सामना किया:

undefined method `children' for nil:NilClass 

मैं Acts_as_tree बंद swith की कोशिश की और अपने ही आत्म संदर्भित assositions लिखें। Acts_as_tree कार्यों के समान ही दिखना चाहिए:

class Category < ActiveRecord::Base 
    belongs_to :parent, :class_name => "Category", :foreign_key => "parent_id" 
    has_many :children, :class_name => "Category", :foreign_key => "parent_id" 
end 

त्रुटि समान है। क्या कोई मदद कर सकता है?

अगला छोटे कदम अपडेट किया गया। फॉर्मेटास्टिक काम के बिना यह कोड ठीक है:

= grouped_collection_select('', :category_id, top_categories, :children, :name, :id, :name, :include_blank => true) 

p.s: top_categories मूल श्रेणियों के संग्रह के साथ सहायक विधि है।

आखिरी बात Formtastic वाक्य रचना :) में इसका अनुवाद है

+0

आप को यह हो रही है के साथ किसी भी भाग्य किया है Formtastic में ठीक से काम करते हैं? – Codebeef

+0

अभी तक नहीं। मैंने जिथब में फॉर्मेटस्टिक लोगों को एक मुद्दा जमा कर दिया है। समूहबद्ध विकल्पों के लिए कोई स्पेक कवरेज नहीं है और एक असफल नमूना की सराहना की जाएगी। – Voldy

+0

क्या आपको यह पता चला? –

उत्तर

14

मामले किसी में एक ही समस्या हो रही है, आप कर सकते हैं निम्नलिखित:

<%= f.input :category, :as => :select, :collection => option_groups_from_collection_for_select(ParentCategory.all, :categories, :name, :id, :name) %> 

Reference from Rails API
Recommendation from Justin French (वह दूर करने का उल्लेख: group_by)

+6

मुझे इस में कोई समस्या है कि यह संबंधित श्रेणी का स्वतः चयन नहीं करता है। क्या आपको एक ही समस्या का सामना करना पड़ा है? – Cristian

+1

Google के माध्यम से यहां आने वाले अन्य लोगों के लिए एफवाईआई: संबंधित श्रेणी का चयन करने के लिए, बस http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i के अनुसार आईडी में 6 वें पैरामीटर के रूप में पास करें -option_groups_from_collection_for_select – Adam21e

+0

@ Adam21e मैंने आईडी को 6 वें अंक के रूप में जोड़ने का प्रयास किया, लेकिन इसका कोई फायदा नहीं हुआ। यह सूची में पहला विकल्प चुनता है। –

0

एक सहायक में आइटम की अपनी सूची के निर्माण और उसके बाद का चयन टैग में गुजर कि कोशिश नहीं क्यों?

मुझे फॉर्मेटास्टिक, या act_as_tree के बारे में बहुत कुछ पता नहीं है, लेकिन अगर आपको यह काम करने में समस्याएं आ रही हैं कि आप कैसे ऊपर हैं, तो मुझे लगता है कि आपके चयन में उन्हें पास करने से पहले अपने विकल्पों का निर्माण करना पूरी तरह से उचित है।

+2

यह काम करता है क्योंकि मैंने अपना प्रश्न अपडेट किया है। लेकिन मैं फॉर्मेटास्टिक का उपयोग करता हूं और इसके सिंटैक्स का उपयोग करना चाहता हूं। – Voldy

1

अरे, इसलिए मैं फॉर्मेटास्टिक के साथ एक विशेष समस्या को हल करने की कोशिश कर रहा था, और पाया कि आप सूची का उपयोग करके सूची बनाने के लिए उपयोग की गई क्वेरी को संशोधित कर सकते हैं: find_options। कोड को देखते हुए, मैंने देखा कि यदि आप निर्दिष्ट नहीं करते हैं: group_by, तो मूल्यों की सूची अंततः मॉडल ऑब्जेक्ट पर एक खोज (: सभी) पर आती है (formtastic.rb में find_raw_collection_for_column नामक विधि में)। इसके बाद पैरामीटर: सभी निर्दिष्ट पैरामीटर का सेट हैं: find_options। इस प्रकार, आप किसी भी परिस्थिति या अन्य पैरामीटर को लागू कर सकते हैं जिन्हें आप आम तौर पर खोजने में उपयोग करेंगे (* तर्क) (http://ar.rubyonrails.org/classes/ActiveRecord/Base.html#M000333 देखें)। निजी तौर पर, मैंने इसे अपने f.input कथन में जोड़ा:

: find_options => {: conditions => {: country_id => @ business.country? @ business.country.id: nil}}

ऐसा करके, मैंने क्वेरी के लिए केवल चयनित काउंटी आईडी के लिए चयन कथन सीमित कर दिया। लेकिन आप का उपयोग करने के लिए सक्षम होना चाहिए: एक समान तरीके से समूह निर्दिष्ट करने के लिए जो आप ग्रुप द्वारा चाहता था अपने प्रश्न में, इस तरह:

: find_options => {: समूह => 'parent.id'}

उम्मीद करता है कि यह मदद करता है।

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