Вложенные формы fields_for :prices, повторять формы несколько раз

у меня есть многие ко многим через ассоциацию, а затем я делаю это

fields_for :device

это отображается хорошо, но я не могу его сохранить, я получаю неизвестный атрибут: цена fields_for:device

И fields_for :devices

field_for :devices

И так далее, одно устройство делает еще один повтор, если я пишу f.fields_for :price, это дает хорошее количество текстовых полей, но пишет

unknown attribute: price
Rails.root: C:/Users/Ignas/mildai/baze4

Application Trace | Framework Trace | Full Trace
app/controllers/commercial_offers_controller.rb:74:in `block in update'
app/controllers/commercial_offers_controller.rb:73:in `update'

Спасибо

Дополнительная информация:

контроллер

 def edit_prices
        @commercial_offer = CommercialOffer.find(params[:id])
     end

ссылка на редактирование цен

  <%= link_to "Edit prices", :controller => "CommercialOffers", :action => "edit_prices", :id => @commercial_offer %>

_edit_price.html.erb

<%= form_for @commercial_offer do |f| %> 
        <% CommercialOffer.find(params[:id]).devices.each do |device| %>
            <%=  check_box_tag  "commercial_offer[device_ids][]", device.id, @commercial_offer.devices.include?(device) %>
                <%=  device.name %>         
            <%= f.fields_for :prices do |builder|  %>
                <%= render 'prices/new_price', :f => builder, :commercial_offer => @commercial_offer, :device => device %>
            <% end %>
         <% end %> 
            <div class="actions">
        <%= f.submit "Save"%>
      </div>
    <% end %>

для одного устройства рендерится только один раз, но для одного устройства рендерится столько раз, сколько устройств с одним и тем же коммерческим_оффером_идентификатором

_new_price.html.erb
Price:
<%= f.text_field :price %></br>
Quantity:
<%= f.text_field :quantity %></br>
Device id:
<%= f.text_field :device_id, :value => device.id %></br>


class CommercialOffer < ActiveRecord::Base
has_many :prices
has_many :devices, :through => :prices
accepts_nested_attributes_for :prices
accepts_nested_attributes_for :devices
end

class Device < ActiveRecord::Base
has_many :prices
accepts_nested_attributes_for :prices
has_many :commercial_offer, :through => :prices

class Price < ActiveRecord::Base
    belongs_to :device
    belongs_to :commercial_offer
end

person Ignas Rytoj    schedule 26.04.2011    source источник


Ответы (1)


Нет никакого field_for метода.

Также ваш вопрос не ясен. Что на самом деле вы хотите сделать? Показать только одно устройство? Который? Первый Последний?

UPD

коммерческое_предложение.rb:

class CommercialOffer < ActiveRecord::Base
  has_many :prices
  has_many :devices, :through => :prices
  accepts_nested_attributes_for :prices
  accepts_nested_attributes_for :devices, :allow_destroy => true
end

Ваше мнение

<%= form_for @commercial_offer do |f| %> 
    <%= f.fields_for :devices do |device| %>
        <p>
          <%= device.check_box :_destroy %>
          <%= device.label "Destroy?" %>
        </p>
        <p>
          <%= device.text_field :name %>         
        </p>
        <%= device.fields_for :prices do |builder|  %>
           <%= render 'prices/new_price', :f => device %>
        <% end %>
     <% end %> 
   <% end %>
   <div class="actions">
     <%= f.submit "Save"%>
   </div>
<% end %>

_new_price частичное

<%= f.text_field :price %></br>
Quantity:
<%= f.text_field :quantity %></br>
Device id:
<%= f.text_field :device_id %></br>
person fl00r    schedule 26.04.2011
comment
да, я сделал ошибку. у меня есть 3 таблицы, первая Commercial_Offers с именем поля, вторые устройства с несколькими полями, такими как имя, описание и последние цены с полем Commercial_offer_id, device_id и цена, я выбрал некоторые устройства для коммерческого предложения, они записаны в таблице цен, поэтому я хочу добавить цену для всех ассоциаций, это почти работает, но записи в режиме редактирования умножаются, если у меня есть 2 устройства в коммерческом предложении, я получаю 4 записи, если у меня есть 3, я получаю 9 записей. - person Ignas Rytoj; 26.04.2011
comment
но когда я использую fields_for :price, это дает мне хорошее количество полей, но не может их сохранить - person Ignas Rytoj; 26.04.2011
comment
хорошо, покажи свои модели и покажи весь вид. но я все еще не понимаю тебя - person fl00r; 26.04.2011
comment
неопределенный метод `check_box', и он отображается одинаково для одного устройства столько раз, сколько у него есть устройств. - person Ignas Rytoj; 27.04.2011
comment
Я забыл знак равенства = - person fl00r; 27.04.2011
comment
И я сдаюсь, чтобы понять, что ты собираешься делать :) - person fl00r; 27.04.2011
comment
Больше не повторяется. Спасибо. последнее неопределенное имя метода для #‹ActionView::Helpers::FormBuilder:0x42eb5f0› Извлеченный исходный код (вокруг строки №3): 1: ‹%= form_for @commercial_offer do |f| %› 2: ‹%= f.fields_for :devices do |device| %› 3: ‹%=device.name %› 4: ‹p› 5: 6: - person Ignas Rytoj; 27.04.2011
comment
это должно быть <%= device.text_field :name %> или <%= device.object.name %>, если вам не нужна форма здесь - person fl00r; 27.04.2011