Ruby on rails 类似Facebook的请求模型。同一型号的多对多
我有一个用户模型:Ruby on rails 类似Facebook的请求模型。同一型号的多对多,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我有一个用户模型: class User < ActiveRecord::Base has_many :sent_requests, :foreign_key => :sender_id, :class_name => "Request" has_many :recieved_requests, :foreign_key => :recipient_id, :class_name => "Request" class用户:发送者id,:类名称=>“请求” 已收到多
class User < ActiveRecord::Base
has_many :sent_requests, :foreign_key => :sender_id, :class_name => "Request"
has_many :recieved_requests, :foreign_key => :recipient_id, :class_name => "Request"
class用户:发送者id,:类名称=>“请求”
已收到多个请求,:外键=>:收件人id,:类名称=>“请求”
和一个请求模型:
class Request < ActiveRecord::Base
belongs_to :sender, class_name: "User", :source => "sender_id"
belongs_to :recipient, class_name: "User", :source => "recipient_id"
类请求“发送者id”
属于收件人,类别名称:“用户”,“源=>“收件人id”
我正在努力理解:外键、:through、:source、:class\u名称等的区别
这似乎与大多数教程示例略有不同,因为用户可以属于双方的关系(尽管不是同时)
关于如何让它工作的任何建议。更重要的是,如何看待这种关系
供参考:
我的请求模型只有发送者id、接收者id和接受:布尔值。以下是我使用的:
在用户模型中:
has_many :sent_requests,
:class_name => "Request",
:foreign_key => "sender_id"
has_many :received_requests,
:class_name => "Request",
:foreign_key => "receiver_id"
在请求的模型中:
belongs_to :sender,
:class_name => "User"
belongs_to :receiver,
:class_name => "User"
注意,当rails无法推断类名时,我们使用user:class\u name指定类名。如果你说:
你有很多要求吗
那么就不需要包含类名。Rails将自动知道这是一个请求。但是,如果要将:request重命名为:sent\u request之类的名称,则需要指定类
还请注意,默认情况下,外键被猜测为带有“_id”后缀的关联的名称。因此,定义“所属:个人”关联的类将使用“个人id”作为默认的:外键。如果使用的名称不符合rails命名约定,则需要指定外键