2010-12-13 9 views
2

における値のサブセット私はモデルがあります:formtastic - accepts_nested_attributes_for

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

私はすでに携帯電話1または5があるかもしれません(ユーザーが追加できる50電話#Sを構築したいが、私はいつも50が利用可能にしたいと)私のコントローラで :私の見解では

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

を、私は電話#S 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なしで2つの列を簡単に実行することはできません。

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

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

私は遠回しにこの問題を回避することができた: 私はない連絡先として電話#Sの別のリストを構築。 phones.build、しかしPhone.newこれは私が25を表示することができ

<%= 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%> 

:(:contact_id => contact.id)と@new_phones

と呼ばれるリストのものを保存するには、その後、私のフォームは次のようになりますページの1つの部分には電話が、もう1つには25個のnested_attributes_forがあります。フォーム提出時に告発されます。

+0

私はラウンドアバウトの方法で必要なものを達成することができました –

答えて

2

ネストされた属性の取得にはいつも問題がありましたが、これは問題を解決するのに役立ちます。

モデル:

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

コントローラー: これは50個の新しいインスタンスを作成し、我々は@contract.phones.build 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

それはショットマンを与えてくれてありがとう。私は私のために働く解決策を投稿しました。とても有難い。 –

+0

解決策を回答として掲示し、それを正しいとマークする必要があります。 ;-) –

関連する問題