2010-07-10 53 views
1

更新:在底部的解決方案如何在嵌套窗體中使用select_tag幫助器?

我希望別人花了一些時間熨平這個相同的問題......我在軌道應用程序內建立一個通訊錄,我有一個人模型和電子郵件模型。人員has_many電子郵件和人員accep_nested_attributes_for:電子郵件。

這一切都完美 - 我有一個嵌套的表單,我可以添加和刪除電子郵件及其屬性在我的表單中(使用類似於Railscasts 196-7(here))的方法。提交表單將創建人員以及電子郵件,並創建所有正確的關聯。

現在的問題是,我無法找到一種方法在嵌套的電子郵件模型上使用select標籤,以便用戶爲該電子郵件選擇KIND(例如work,home,other)。所以,現在編輯Person模型,沒有簡單的方法來選擇存儲在rails模型中的屬性。

這是我現在有:

<%= form_for(@source) do |f| %> 
<% f.fields_for :emails do |builder| %> 
. . . 
<%= builder.text_field :address, :size => 15 %> 



<%= render :partial => 'email_select_1' %>0<%= render :partial => 'email_select_2' %>0<%= render :partial => 'email_select_3' %> 

注:以上是允許我使用相同的代碼片段在JavaScript以後設置ID的哈克的方式。諧音吐出一個硬編碼的選擇和選項,在這種情況下,「0」,但在javascript,我可以將其更改爲一個獨特:

<select id="person_emails_attributes_0_kind" name="person[emails_attributes][0][kind]"><option value="work">work</option><option value="home">home</option><option value="other">other</option></select> 

,然後剩下的看起來像這樣(縮寫):

. . . 
<% end %> 
. . . 
<!-- more form stuff, actions, etc... --> 
. . . 
<% end %> 

有沒有辦法使用select_tag幫助器,並替換我的hacky-hard-coded select?如果沒有,對編寫我自己的幫手方法有什麼建議?

在此先感謝!

更新:感謝Geoff的解決方案。對於後人來說,最重要的是使用select而不是select_tag。然後你可以這樣做:

<%= builder.select :kind, [['work', 'work'], ['home', 'home'], ['other', 'other']]%> 

回答

2

你應該只需要將formbuilder變量傳遞給partial。你會被編碼的部分是這樣做:

<%= form_for(@source) do |f| %> 
    <% f.fields_for :emails do |builder| %> 
    . . . 
    <%= builder.text_field :address, :size => 15 %> 
    <%= render :partial => 'email_select_1', :locals => {:builder => builder} %> 
    <% end %> 
<% end %> 

然後你的部分,你可以使用:

<%= builder.select :kind %> 

就好像它是fields_for塊內。

希望這會有所幫助!

+0

在測試中,我得到這個錯誤: 未定義的方法'select_tag」爲#<::的ActionView ::幫手FormBuilder:0x1343deb38> 任何想法? – 2010-07-10 22:40:27

+0

它是builder.select關於那...對我的帖子。 – 2010-07-11 02:13:49

+0

太好了,謝謝!完美的作品。 – 2010-07-12 03:14:40