2013-07-17 10 views
23

मैं निम्नलिखित रूपों का सरल रूप से अनुवाद कैसे करूं?रेल 4 simple_form collection_select

<%= form_for(@bill) do |f| %> 

<%= f.label :location_id %> 
<%= f.collection_select(:location_id, @locations, :id, :location_name, 
     {:selected => @bill.location_id}) %> 

मैं एक साधारण एसोसिएशन का उपयोग नहीं कर सकता क्योंकि @ लोकेशन कहां से पूछताछ का परिणाम है।

उत्तर

56

इस

<%= simple_form_for @bill do |f| %> 
    <%= f.input :location,:collection => @locations,:label_method => :location_name,:value_method => :id,:label => "Location" ,:include_blank => false %> 
    <%= f.button :submit %> 
<%end%> 

आशा इस मदद

+0

अतिरिक्त "संग्रह:" को हटाने के बाद काम करता है, सिवाय इसके कि यह एक रिक्त जोड़ता है जिसे मैं नहीं चाहता हूं। – markhorrocks

+0

@markhorrocks 'include_blank => false' नामक एक विकल्प है, इसे अभी जोड़ें – Viren

+0

@markhorrocks' include_blank => false' विकल्प – Viren

2

सरल रूप में, अगर हम स्थान और बिल के बीच सम्बन्ध, की तुलना में हम इस तरह कर सकते हैं:

<%= simple_form_for @bill do |f| %> 
    <%= f.association :location, collection: @locations, priority: @bill.location %> 
    <%= f.button :submit %> 
<% end %> 

आशा इस में मदद मिलेगी।

+0

वहाँ यह एक एसोसिएशन है लेकिन @locations = Locati on.where (club_id: club_id), हालांकि, ऐसा लगता है कि यह अभी भी काम कर सकता है? – markhorrocks

+0

यह काम नहीं करता है। – markhorrocks

+0

यदि आपके पास उचित संबंध नहीं है: <% = f.input: स्थान, संग्रह: @ स्थान%> –

6

यहाँ की कोशिश करो अंतिम है:

<%= f.input :location_id, collection: @locations, label_method: :location_name, value_method: :id,label: "Location", include_blank: false, selected: @bill.location_id %> 
+0

के साथ उत्तर संपादित करें यह सरल फ़ॉर्म में ऐसा करने का सही तरीका है –

0

अपने स्थान मॉडल में, आप भी एक बना सकते हैं:

def to_label 
    location_name 
end 
संबंधित मुद्दे