Гости покупают Предметы у других гостей, поэтому у Предмета будут покупатель и продавец, а у Гостя будут приобретены Предметы и куплены Предметы.
class Guest < ActiveRecord::Base
has_many :bought_items, class_name: 'Item', foreign_key: 'buyer_id'
has_many :sold_items, class_name: 'Item', foreign_key: 'seller_id'
accepts_nested_attributes_for :bought_items, :reject_if => lambda { |a| a[:price].blank? } , :allow_destroy => true
accepts_nested_attributes_for :sold_items, :reject_if => lambda { |a| a[:price].blank? } , :allow_destroy => true
end
и
class Item < ActiveRecord::Base
belongs_to :seller, class_name: 'Guest', foreign_key: 'seller_id', inverse_of: :bought_items
belongs_to :buyer, class_name: 'Guest', foreign_key: 'buyer_id', inverse_of: :sold_items
attr_accessor :buyer_id, :seller_id
end
Похоже, что форма отправляет данные POST правильно (пока я только кодировал покупки), для:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"9gR+GZfhT4CffM3ML9LkZaYK+eA85a1oLRG+NRqoRnY=",
"guest"=>{
"guest_number"=>"3",
"bought_items_attributes"=>{
"0"=>{
"item_number"=>"432",
"description"=>"test",
"seller_id"=>"27",
"sales_price"=>"10.0", "id"=>"1"},
"1"=>{
"item_number"=>"",
"description"=>"",
"seller_id"=>"27",
"sales_price"=>"0.0"}
}
},
"commit"=>"Save Changes",
"id"=>"28"}
Обновления происходят для изменения guest_number, но не для любого из вложенных атрибутов. Что-то не так в настройке модели?
Это Rails 3.1.