text_field_tag has_many through

时间:2011-04-20 17:04:05

标签: ruby-on-rails-3

我如何让它发挥作用?

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

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

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

commercial_offer/_form.html.erb

<% for device in Device.find(:all) %>  
    <div>  
      <%= check_box_tag "commercial_offer[device_ids][]", device.id, @commercial_offer.devices.include?(device) %>  
      <%= device.name %> 
      <%= form_for( @price) do |f| %>
      <%= f.label :price %><br />
      <%= f.text_field :price %>

我得到<%= form_for( @price) do |f| %>

未定义的型号名称

1 个答案:

答案 0 :(得分:0)

您可以在Device模型上接受嵌套属性,如下所示:

# app/models/device.rb
class Device < ActiveRecord::Base
  has_many :prices
  accepts_nested_attributes_for :prices
end

# app/controllers/devices_controller.rb
class DevicesController < ApplicationController
  def index
    @devices = Device.all
  end
end

# app/views/devices/_form.html.erb
<% @devices.each do |device| %>  
<div>  
  <%= check_box_tag "commercial_offer[device_ids][]", device.id,    @commercial_offer.devices.include?(device) %>
  <%= form_for device do |f| %>
    <%= device.name %> 
    <%= f.fields_for :prices do |p| %>
      <%= p.label :price %><br />
      <%= p.text_field :price %>
    <% end %>
    <%= f.submit "Submit" %>
  <% end %>
</div>
<% end %>

在表单中包含子对象是一种非常干净的方法。