2010-12-13 86 views
2

值的子集,我有一個模型:formtastic - 在accepts_nested_attributes_for

class Contact < ActiveRecord::Base 
    has_many :phones 
    accepts_nested_attributes_for :phones 
end 

我想建立50個電話#秒,用戶可以添加(可能已經存在的手機1或5,但我總是想50個可用) 在我的控制器:

while contact.phones.length < 50 
    contact.phones.build({:phone_type_id => PhoneType['a_cool_type'].id}) 
end 

在我看來,我想有手機#秒25排,每排

<%= semantic_form_for contact do |form| %> 
    <table width=50%> 
    <%= form.inputs :for => :phones[0..25] do |phone_form| %>    
     <td align="center"><%= phone_form.input :number, :label => false %></td> 
     .... 
    <% end %> 
    </table>    
    <table width=50%> 
    <%= form.inputs :for => :phones[25..49] do |phone_form| %>   
     <td align="center"><%= phone_form.input :number, :label => false %></td> 
     .... 
    <% end %> 
    </table> 
<%end %> 
的2列3210

顯然行:

<%= form.inputs :for => :phones[25..49] do |phone_form| %> 

不起作用,但它傳達我的意思(我希望)。我想要更多地控制formtastic如何抓取潛在的對象關聯。

下面的工作,但我不能輕鬆做兩列沒有花哨的CSS。

<%= form.inputs :for => :phones do |phone_form| %> 

有什麼建議嗎?

----------更新----

我能解決這個問題的一種迂迴的方式: 我建立了手機#秒的單獨列表沒有接觸。 phones.build,但Phone.new(:CONTACT_ID => contact.id)和存儲那些在列表稱爲@new_phones

然後我的形式如下:

<%= semantic_form_for @contact, :url => ..., do |f| %> 
    <% @new_phones[0...25].each_with_index do |phone, i| %> 
     <%= f.fields_for :phones, phone, :child_index => i do |phone_form| %>    
     <%= render "phone_fields", {:phone_form => phone_form, :phone => phone} %> 
     <%end%> 
    <% end %> 
    .... 
    <% @new_phones[25...50].each_with_index do |phone, i| %> 
     <%= f.fields_for :phones, phone, :child_index => i+25 do |phone_form| %>     
     <%= render "phone_fields", {:phone_form => phone_form, :phone => phone} %> 
    <%end%> 
    <% end %> 
<%end%> 

這讓我顯示25手機在頁面的一部分,另一部分爲25,使用nested_attributes_for:手機作爲前端工作通過表單提交。

+0

我能夠以迂迴的方式完成我需要的東西 – 2011-01-19 04:37:49

回答

2

我一直有問題,因爲我想要的嵌套屬性工作,但這可能有助於解決您的問題。

型號:

class Contact < ActiveRecord::Base 
    has_many :phones 
    accepts_nested_attributes_for :phones 
end 

控制器: 看看我們所循環@contract.phones.build 50倍,這將創建50個新的實例。

class Contact < ApplicationController 
    def new 
    @contact = Contact.new 
    25.times do 
     @contact.phones.build 
    end 

    end 
end 

查看new.html.erb:

... 
<%= p.semantic_fields_for :phones do |ec| %> 
    <%= ec.input :number %> 
<% end %> 
... 

我也嘗試了幾個試圖攔截循環,可悲的是,沒有明確的清潔效果。

+1

謝謝你給它一個鏡頭的人。我發佈了一個適用於我的解決方案。非常感激。 – 2011-01-19 04:52:02

+0

您應該已將解決方案公佈爲答案,並將其標記爲正確。 ;-) – 2011-03-29 15:53:21