我想呼叫我的json端點,給我提供所有志愿者_shift.date在params[:start]和params[:end]之間的任務
。我有辦法在assignments_controller的index方法中做到這一點嗎?
我目前在控制器的索引方法中這樣做了,但是它在我面前爆炸了......
assignments_controller的索引方法是什么?
assignments_controller.rb
def index
@assignments = Assignment.where(volunteer_shift.date: params[:start]. params[:end]) <--如何To DO this?
end end
下面是我的作業模型的樣子......
assignment.rb
class Assignment < ApplicationRecord
belongs_to:volunteer_shift
def event_date
self.volunteer_shift.date
end 結束
...
end.
在我的Volunteer_shift模型中,我有一個 "date "方法
volunteer_shift.rbclass VolunteerShift < ApplicationRecord
has_many :assignments
屬于:volunteer_event。
...
def date ...
self.volunteer_event.date
end end
end。
有什么辦法可以讓我找回所有的任務,其中volunteer_shift.date(或assignment.event_date)是在params[:start]和params[:end]之間?
注意:Rails 5
uj5u.com熱心網友回復:
你不能直接使用方法作為活動記錄引數,因為Rails基本上使用SQL來檢索這些資料,所以,你必須處理屬性
你可以使用ActiveRecord#joins來連接這些表,然后使用你的 "where "陳述句,比如; Assignment.joins(volunteer_shift: :volunteer_event) 。 where(volunteer_shifts: {volunteer_events: {date: params[:start] 。 .params[:end] }})
記住;"joins "引數必須是模型名稱,而 "where "引數必須是表的名稱
< <解釋一下
如果您希望隱藏所有這些代碼,您可以創建一個范圍來完成,例如;
assignment.rb
class Assignment < ApplicationRecord
belongs_to :volunteer_shift。
scope :date_range, lambda { |range|
joins(volunteer_shift: :volunteer_event)
.where(volunteer_shifts: { volunteer_events: { date: range }) })
}
def event_date>
self.volunteer_shift.date
end 結束
end。
并且用;
呼叫Assignment.date_range(params[:start].params[:end] )
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/322748.html
標籤:
下一篇:型別時間的無效輸入語法,或者是
