作者hcm92u (momo)
看板Ruby
标题[问题] has_many :through 的 join table
时间Fri Apr 20 15:54:08 2012
Models:
class Product < ActiveRecord::Base
has_many :product_properties, :dependent => :destroy
has_many :properties, :through => :product_properties
accepts_nested_attributes_for :product_properties, :allow_destroy => true
end
class ProductProperty < ActiveRecord::Base
belongs_to :product
belongs_to :property
end
class Property < ActiveRecord::Base
has_many :product_properties, :dependent => :destroy
has_many :products, :through => :product_properties
end
ProductProperty有一个栏位value是记录产品属性的值。
/views/admin/products/_form.html.erb
<% Property.all.each_with_index do |property, index| %>
<%= check_box_tag "product[property_ids][]", property.id, @product.properties.include?(property) %>
<%= property.name %>
<% end %>
products_controller
def update
@product = Product.find(params[:id])
params[:product][:property_ids] ||= []
@product.update_attributes(params[:product])
end
目标是把所有的properties显示出来,旁边会有一个checkbox和textfield。
如果checkbox有被选取的话,textfield就会是那个property的value。
想问如何在新增或更新product的时候,同时更新value。
现在是不会写 textfield 的那一部份,因为如果写了下面写两行,会出现duplicate records。
<%= text_field_tag "product[product_properties_attributes][#{index}][id]", @product.product_properties.find_by_property_id(property).id %>
<%= text_field_tag "product[product_properties_attributes][#{index}][value]", @product.product_properties.find_by_property_id(property).value %>
环境:
e.g. Ruby 1.9.3 Rails 3.2.2
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 182.93.56.102