rails 3.1 has_many: через дополнительное поле в модели соединения

я пытаюсь решить has_many: через ассоциацию с дополнительным 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"}

person zposloncec    schedule 07.05.2012    source источник


Ответы (1)


Зачем тебе это?

:url => save_services_path(@partner.id)

в вашем form_for? вы создаете форму с помощью @partner, но сохраняете с помощью сервисов. попробуйте

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

или опубликуйте свои параметры из журнала

person Tom Meinlschmidt    schedule 07.05.2012
comment
у меня отношения многие ко многим, поэтому я сохраняю услуги для партнера с помощью действия save_services. Это отлично работает только для флажков, но мне нужно сохранить дополнительную цену параметра. - person zposloncec; 08.05.2012
comment
не могли бы вы показать, как вы сохраняете свою модель обслуживания? Поскольку сервис ничего не знает о вложенных ценах. - person Tom Meinlschmidt; 08.05.2012
comment
Я пытаюсь решить аналогичную проблему как @zposloncec, но я пытаюсь сделать все, когда новая запись создается, а не редактируется. Это возможно? - person ctilley79; 26.06.2012