如何设置特定的活动记录关联

时间:2014-12-17 16:31:23

标签: ruby-on-rails

我是Rails的新手并且正在使用数据库,我想知道设置以下Active Record Association的最佳方式是什么。

我有以下表格:

  • 用户
  • 产品
  • 请求

我需要以下列方式将每个表与其他表相关联:

  • 每个用户都应该能够拥有许多产品。产品将属于用户。
  • 产品表需要与用户表关联,方式是不需要通过与用户数据关联访问产品数据的请求
  • 每个请求都需要有两个用户,由外键定义为请求者和被请求者
  • 每个请求还需要有两个产品,定义为requester_product和requestee_product

我最初认为我可以使用has_many:through association(在2.4:http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association下看到),但是这种结构不允许在没有请求的情况下通过用户数据访问产品数据。

1 个答案:

答案 0 :(得分:1)

class User < ActiveRecord::Base

  has_many :requests
  has_many :products

end

class Product < ActiveRecord::Base

  has_many :requests
  belongs_to :users

end

class Request < ActiveRecord::Base

  belongs_to :requester, class_name: 'User'
  belongs_to :requestee, class_name: 'User'
  belongs_to :requester_product, class_name: 'Product'
  belongs_to :request_product, class_name: 'Product'

end

我假设多个用户可以与多个产品相关联。给你:

user.products
product.user
request.requester # will return the relevant requesting user
request.requestee # will return the relevant requestee user
request.requester_product # will return the relevant requesting user's product
request.requestee_product # will return the relevant requestee user's product
product.requests # all requests associated to a product
user.requests # all requests associated to a user