1

我有一个工作正常的查询:

@schedule = Schedule.find(params[:id])    
@schedule_tasks = ScheduleTask.select("s.*, t.*, t.*, d.*, st.*").from("schedule_tasks st").
            joins("left join schedules s ON s.id = st.schedule_id").
            joins("left join tasks t ON t.id = st.task_id").
            joins("right join days d ON d.id = st.day_id").
            order("d.number, t.name").
            group_by{|d| d.number}

我不得不将搜索细化为仅具有特定 schedule_id 的 schedule_tasks,因此我将第二行编辑为:

joins("left join schedules s ON s.id = st.schedule_id AND s.id = ?", @schedule.id).

这导致了以下错误:

unknown class: Fixnum

如果我取出 group_by,错误就会消失 - 但我需要那个,我已经尝试用数字而不是 @schedule.id 进行硬编码,但这也不起作用,谷歌搜索没有透露很多关于这个的细节错误。

4

2 回答 2

1

对于来自 Google 的任何人,我使用纯字符串插值来解决此问题。此方法易受SQL 注入攻击,因此请确保在使用变量之前键入检查变量。

在这种情况下,我会做

@schedule_id = @schedule.id
.
.
.
joins("left join schedules s ON s.id = st.schedule_id AND s.id = #{@schedule_id}")
于 2017-02-20T22:04:24.907 回答
0

而不是遵循learning_to_swim 的答案,如前所述,它有 SQL 注入的风险,你不能将你的@schedule_id转换成字符串吗?

@tasks = ScheduleTask.joins("left join [...] s.id = ?", @schedule.id.to_s)
于 2017-05-21T00:53:44.520 回答