我已更新此问题
我在RAILS 4应用程序中有以下SQL范围,它有效,但有几个问题。
1)它真的是RAW SQL而不是rails方式 2)字符串插值为SQL注入带来了风险
这就是我所拥有的:
scope :not_complete -> (user_id) { joins("WHERE id NOT IN
(SELECT modyule_id FROM completions WHERE user_id = #{user_id})")}
关系是多对多的,使用名为completions的连接表来匹配用户和modyules之间关系的id。
任何帮助制作这个Rails(y)以及如何设置它以获取user_id的arg没有风险,所以我可以这样称呼它:
Modyule.not_complete("1")
谢谢!
答案 0 :(得分:1)
你应该添加一些关于模型及其关联的信息,无论如何我的试用,可能会有一些错误,因为我不知道关联是一对多,多对多。< / p>
scope :not_complete, lambda do |user_id|
joins(:completion).where.not( # or :completions ?
id: Completion.where(user_id: user_id).pluck(modyule_id)
)
end
PS:为了便于阅读,我将其转换为多行,如果您愿意,可以将其更改为oneline。