【发布时间】:2018-02-28 22:04:02
【问题描述】:
这是在 Rails 4 中清理控制器内的“加入”参数的最佳方法吗?
假设:
user_name = params[:user_name]
.
# That's the only way that I can figure this out:
@result = Agenda.joins("LEFT JOIN meetings AS me ON meetings.agenda_id = agendas.id WHERE me.name = #{Agenda.sanitize(user_name})"
我已经尝试过了,但没有用,因为 'joins' 需要在每个 ',' 之后使用表格:
@result = Agenda.joins("LEFT JOIN meetings AS me ON meetings.agenda_id = agendas.id WHERE me.name = ?", user_name)
注意: 这只是解释问题的一小段代码,在完整的代码中我真的必须使用 LEFT JOIN。
【问题讨论】:
-
去掉WHERE子句,然后可以添加,比如
Agenda.joins('LEFT JOIN meetings ON meetings.agenda_id = agendas.id').where('meetings.name = ?', user_name)。 -
为什么不使用
Agenda.joins(:meetings).where(meetings: { name: user_name })? -
这让我很好奇:我遇到了这个问题,最终的共识似乎是 DB 在 WHERE 条件内部和外部的查询上很可能具有相同的性能。见stackoverflow.com/questions/1018952/…
-
感谢 cmets 关于查询,我真的会考虑使用 'where' 重写它们。
标签: sql ruby-on-rails join controller sanitize