【问题标题】:Rails - retrieve result of method call from controller in a different modelRails - 从不同模型中的控制器检索方法调用的结果
【发布时间】:2021-11-14 15:37:14
【问题描述】:

我正在尝试调用我的 json 端点,以将所有作业返还给我,其中志愿者_shift.date 位于 params[:start] 和 params[:end] 之间

有没有办法在 assignments_controller 的 index 方法中做到这一点?

我目前在控制器的 index 方法中有这个,但它在我面前爆炸了......

assignments_controller.rb

def index
  @assignments = Assignment.where(volunteer_shift.date: params[:start]..params[:end])  <--- HOW To DO this?
end

这是我的作业模型的样子...

assignment.rb

class Assignment < ApplicationRecord
  belongs_to :volunteer_shift

  def event_date
    self.volunteer_shift.date
  end
...
end

在我的 Volunteer_shift 模型中,我有一个“日期”方法

volunteer_shift.rb

class VolunteerShift < ApplicationRecord
  has_many :assignments
  belongs_to :volunteer_event
...
  def date
    self.volunteer_event.date
  end
end

有没有办法可以取回所有的作业,其中志愿者_shift.date(或 assignment.event_date)在 params[:start] 和 params[:end] 之间?

注意:Rails 5

【问题讨论】:

  • 你试试这个sql:Assignments.where('volunteer_shift.date BETWEEN ? AND ?', params[:start], params[:end])
  • 现在这样说:“PG::UndefinedTable: 错误:缺少表“volunteer_shift”的 FROM 子句条目注意:“日期”列实际位于志愿者事件中。volunter_event 是志愿者移位中的列跨度>

标签: ruby-on-rails


【解决方案1】:

您不能直接使用方法作为活动记录参数,因为 rails 基本上使用 SQL 来检索这些数据,因此,您必须处理属性

您可以使用ActiveRecord#joins 加入表格,然后使用您的“where”语句,例如;

 Assignment.joins(volunteer_shift: :volunteer_event).where(volunteer_shifts: {volunteer_events: {date: params[:start]..params[:end] }})

记住; “joins”参数必须是关系名称,而“where”参数必须是表名


如果你想隐藏所有这些代码,你可以创建一个scope 来做到这一点,比如;

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])

【讨论】:

  • 差不多。 joins 的参数是关联的名称,不一定需要与模型名称相同。
  • 已更正,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
相关资源
最近更新 更多