私は has_many を解決しようとしています:結合モデルの追加の text_field との関連付けを通じて.既存の回答のどれも私のためにトリックを行いません.
私は3つのモデルを持っています:
class Partner
has_many :prices
has_many :services, :through => :prices
accept_nested_attributes_for :prices
end
class Service
has_many :prices
has_many :partners, :through => :prices
end
class Price
belongs_to :service
belongs_to :partner
end
価格表は次のようになります。
id
partner_id
service_id
price
選択したすべてのサービスの価格を入力する必要があります。
ビューは次のようになります。
<%= form_for(@partner, :url => save_services_path(@partner.id), :remote => true) do |f| %>
<table>
<% @services.in_groups_of(4, false) do |services| %>
<tr>
<% services.each do |service| %>
<td>
<%= check_box_tag "partner[service_ids][]", service.id, @partner.services.include?(service) %>
<%= service.name %>
<%= f.fields_for :prices do |p| %>
<%= p.text_field :price %>
<% end %>
</td>
<% end %>
</tr>
<% end %>
</table>
<% end %>
チェックボックスは正常に機能しますが、サービスの価格を更新できません。問題はネストされた形式の構文にあると思います...さまざまな組み合わせを試しましたが、うまくいきませんでした。
前もって感謝します!
アップデート:
コントローラーのアクション:
def save_services
@partner = Partner.find(params[:id])
@partner.update_attributes(params[:partner]
end
ログ:
Started PUT "/partners/save_services/337" for
Processing by PartnersController#save_services as JS
Parameters: {"utf8"=>"â", "authenticity_token"=>"xxx", "partner"=>{"service_ids"=>["20", "24"]}, "commit"=>"Save", "id"=>"337"}