Можно ли управлять ассоциациями вручную? - PullRequest
0 голосов
/ 06 апреля 2010

Вот соответствующие модели:

Пользователь Товар Заказать

Пользователь может продавать или покупать товары В заказе есть покупатель, продавец и один товар

Я знаю, что могу сделать это с помощью отношений HABTM между заказами и пользователем, но мне кажется, что было бы проще поместить в таблицу Order следующие столбцы:

: seller_id : Buyer_id

и управляйте этими отношениями вручную, поскольку заказы создаются только один раз и никогда не редактируются. Однако это не похоже на Rails, и мне интересно, упускаю ли я что-то концептуально в отношениях HABTM.

Ответы [ 2 ]

2 голосов
/ 06 апреля 2010

нет, это не рубиновый способ, хотя вы не редактируете заказ после его создания.

Используйте следующие отношения в модели, я думаю, что это сработает. Нет проверки, хотя

User.rb
has_many :users
has_many :purchase, :class_name =>Order, :foreign_key=>'buyer_id'
has_many :sells, :class_name =>Order, :foreign_key=>'seller_id'

Product.rb
belongs_to :user
has_many :orders

Order.rb
belongs_to :buyer, :class_name =>User, :foreign_key=>'buyer_id'
belongs_to :seller, :class_name =>User, :foreign_key=>'seller_id'
belongs_to :product
0 голосов
/ 06 апреля 2010

Для этого вы должны использовать ассоциации Rails. Ассоциация has_many - лучший выбор для вашего сценария.

class User < ActiveRecord::Base
  has_many :buys,  :class_name => "Order", :foreign_key => "buyer_id"
  has_many :sales, :class_name => "Order", :foreign_key => "seller_id"
end

class Product < ActiveRecord::Base
end

class Order < ActiveRecord::Base
  belongs_to :product
  belongs_to :buyer,  :class_name => "User", :foreign_key => "buyer_id"
  belongs_to :seller, :class_name => "User", :foreign_key => "seller_id"
end

Теперь вы можете использовать ассоциацию следующим образом:

current_user.buys.create(:seller => u, :product => p)
current_user.buys
current_user.sells
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...