Rails:如何在模型

时间:2016-12-03 04:28:57

标签: ruby-on-rails ruby

在Rails 4中我正在使用:

class Ticket < ActiveRecord::Base

  has_many :request_attendances, dependent: :destroy

  has_many :attending_request_attendances, -> {
    where("data->>'rsvp_completed' = 'true'")
      .where("data->>'is_coming' = 'true'")
  }, class_name: 'RequestAttendance'

end

在我的门票模型中

class RequestAttendance < ActiveRecord::Base

  belongs_to :tickets, inverse_of: :request_attendances

  scope :is_coming, -> { where("data->>'is_coming' = 'true'")}
  scope :rsvp_completed, -> { where("data->>'rsvp_completed' = 'true'")}

end

在我的RequestAttendance模型中

我想做这样的事情

has_many :attending_request_attendances, -> {
  :is_coming
  :rsvp_completed
}, class_name: 'RequestAttendance'

重用我在RequestAttendance模型中创建的范围。

这样的事情是可能的,目前它不起作用,给我以下错误:

  

未定义的方法`除了&#39; for:rsvp_completed:Symbol

如果我在这里添加一个has_many块的位置:

has_many :attending_request_attendances, -> {
  :is_coming
  :rsvp_completed
  where("data->>'rsvp_completed' = 'true'")
}, class_name: 'RequestAttendance'

它没有错误,但它也不使用范围子句。

2 个答案:

答案 0 :(得分:2)

您可以在这样的关联中将范围链接在一起:

has_many :attending_request_attendances, -> { 
  is_coming.rsvp_completed 
}, class_name: 'RequestAttendance'

答案 1 :(得分:0)

您已在RequestAttendance模型中添加以下代码

scope :is_coming, -> { where("data->>'is_coming' = 'true'")}
scope :rsvp_completed, -> { where("data->>'rsvp_completed' = 'true'")}

如果您在Tickets Model

中使用以下代码
class Tickets < ActiveRecord::Base
  has_many :RequestAttendance 
end

范围可用于has_many关联,因此它将使用is_coming&#39;来获取所有记录。 =&#39; true&#39;和&#34;数据 - &gt;&gt;&#39; rsvp_completed&#39; =&#39; true&#39;&#34;

您可以使用对象ticket.requestAttendance.is_coming.rsvp_completed

获取它

这是你的期望还是如果我误解了请解释