2009-03-20 14 views
5

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

यहाँ मेरी मॉडल

class QuestionMembership < ActiveRecord::Base 
    belongs_to :form 
    belongs_to :question 
    acts_as_list 
end 

class Form < ActiveRecord::Base 
    has_many :question_memberships 
    has_many :questions, :through => :question_memberships 
end 

class Question < ActiveRecord::Base 
    has_many :question_memberships 
    has_many :forms, :through => :question_memberships 
    acts_as_list 
end 

और खराब दृश्य कोड है कि मुझे सूची प्रदान करती है ...

<% @form.question_memberships.each do |qm| %> 
    <% q_id = "question_#{qm.id}" %> 
    <li class="question" id=<%= q_id %> > 
    <div style="color: #999; font-size: 8pt"> 
     <%=h qm.question.content %> 
    </div> 
    </li> 
    <%= draggable_element(q_id, :revert=>true) %> 
<% end %> 

खींचें रहे हैं ... और ड्रॉप पुनर्व्यवस्था के लिए काम करता है। QuestionMembership ऑब्जेक्ट्स के लिए डीबी में स्थिति मान अपडेट और पृष्ठ वास्तव में रीडर को सही तरीके से दिखाता है। समस्या यह है कि एक पेज रीलोड पर, यह जो भी ऑर्डर लगता है उसे वापस डिफ़ॉल्ट करता है। मुझे लगता है कि यह Question_membership स्थिति के बजाय ऑर्डर के लिए प्रश्न आईडी पर डिफ़ॉल्ट है, लेकिन मुझे यकीन नहीं है।

प्रश्नपत्र सदस्यता के स्थिति क्षेत्र द्वारा प्रारंभिक प्रस्तुत करने पर मैं वास्तव में कैसे आदेश दे सकता हूं इस पर कोई विचार?

उत्तर

8

अंतिम संस्करण:

class QuestionMembership < ActiveRecord::Base 
    belongs_to :form 
    belongs_to :question 
    acts_as_list :scope => :form 
end 

class Form < ActiveRecord::Base 
    has_many :question_memberships, :order => "position" 
    has_many :questions, :through => :question_memberships 
end 

class Question < ActiveRecord::Base 
    has_many :question_memberships, :order => "position" 
    has_many :forms, :through => :question_memberships 
    acts_as_list :scope => :form 
end 
+0

, प्रश्न मॉडल और फॉर्म मॉडल पर स्थिति विशेषता है? – Paul

+1

हां, स्थिति विशेषता केवल तालिका में एक कॉलम है। –

3

जैसे ही मैं प्रश्न पोस्ट करता हूं, मुझे जवाब मिल जाता है। मैं गायब था: आदेश और: मेरे मॉडल पर स्कोप विशेषताएँ।

+2

आपको सही कोड पोस्ट करना चाहिए और अपना उत्तर स्वीकार करना चाहिए। –

+0

आपको इसके साथ अपना दूसरा उत्तर भी अपडेट करना चाहिए, न कि नया जवाब जोड़ें। इस मामले में –

1
रेल 2.3 के साथ

आप स्थिति से हमेशा क्रम में एक डिफ़ॉल्ट गुंजाइश सेट कर सकते हैं:

acts_as_list :scope => <scope clause> 
default_scope :order => :position 

ध्यान दें कि क्षेत्र के इस प्रयोग acts_as_list, जो क्या गुंजाइश करने का फैसला करता सूची की तुलना में अलग है।

2

मैं एक भयानक समय इस काम चल रहा था। जब तक मुझे यह उदाहरण नहीं मिला, तब तक मैं "प्रश्न" मॉडल पर act_as_list का उपयोग कर रहा था। यह काम करेगा, लेकिन जब मैंने नए प्रश्न बनाने की कोशिश की तो रेल उलझन में आ रही थीं।

मैंने इसे इस तरह से आजमाया, और मैं नई वस्तुओं को बना सकता था, लेकिन ऐसा लगता था कि मेरा ऐप भ्रमित था कि "स्थिति" क्षेत्र किस मॉडल को जीना चाहिए।

अंत में, मुझे एहसास हुआ कि, मेरे मामले में, केवल स्थिति मॉडल का उपयोग करने के लिए पूरी तरह उपयुक्त था क्योंकि एक स्थिति क्षेत्र है, क्योंकि यह बिल्कुल सही है: स्कोप कीवर्ड के लिए था! यह प्रत्येक "फॉर्म", को "प्रश्न" के आदेश को स्कॉप्स करता है जो प्रति फॉर्म पर भिन्न हो सकता है। इसके बाद, मैंने "प्रश्न" मॉडल से act_as_list को छोड़ दिया, और "QuestionMembership" उदाहरणों को पकड़ने के आधार पर सॉर्टिंग के साथ निपटाया (और फिर डेटा प्रदर्शित करने के लिए अपने बच्चों का उपयोग करके)।

मुझे पता है कि मैं यहां बहुत कुछ नहीं जोड़ रहा हूं, लेकिन रोशनी मेरे लिए आईं, और शायद यह टिप्पणी किसी और की मदद करेगी।

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