Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 类似Facebook的请求模型。同一型号的多对多_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

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命名约定,则需要指定外键