簡體   English   中英

rails 3.1 has_many:通過加入模型中的額外字段

[英]rails 3.1 has_many :through extra field in join model

我正在嘗試解決has_many:通過與join模型中的其他text_field關聯。現有的答案都沒有對我有用。

我有三種模式:

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"}

你為什么有這個?

:url => save_services_path(@partner.id)

在您的form_for? 您正在使用@partner創建表單,但使用服務進行保存。

<%= form_for(@partner, :url => {:action => 'update'}, :remote => true) do |f| %>

或從日志中發布您的參數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM