#ruby-on-rails-3 #nested-forms #nested-attributes
#ruby-on-rails-3 #вложенные формы #вложенные атрибуты
Вопрос:
у меня есть много ко многим через ассоциацию, и затем я делаю это
fields_for :device
это отображается в хорошем виде, но я не могу его сохранить, я получаю неизвестный атрибут: цена
И fields_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 %>
для одного устройства у него есть рендеринг только один раз, но он рендерит для одного устройства столько раз, сколько устройств с одинаковым commercial_offer_id
_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
Ответ №1:
Нет никакого field_for
метода.
Также ваш вопрос неясен. Что на самом деле вы хотите сделать? Показывать только одно устройство? Какой из них? Первая, последняя?
UPD
commercial_offer.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>
Комментарии:
1. да, я допустил ошибку. у меня есть 3 таблицы, первая commercial_offers с названием поля, вторая devices, с несколькими полями, такими как name, description, и последними ценами с commercial_offer_id, device_id и полем price, я выбрал несколько устройств для коммерческого предложения, они записаны в таблице цен, поэтому я хочу добавить цену для всех ассоциаций, это почти работает, но записи в режиме редактирования умножаются, если у меня есть 2 устройства в коммерческом предложении, я получаю 4 записи в поле зрения, если у меня есть 2 устройства в коммерческом предложении, я получаю 4 записи в поле зрения, если у меня есть 3, я получаю 9 записей в поле зрения
2. но когда я использую fields_for: цена, это дает мне хорошее количество полей, но не может сохранить его
3. хорошо, покажите ваши модели и покажите весь ваш вид. но я все еще тебя не понимаю
4. неопределенный метод `check_box’ и он отображается одинаково для одного устройства столько раз, сколько у него устройств
5. Я забыл там знак равенства
=