在我的Rails 4应用程序中,我使用以下SQL' OR'对我的一个模型进行了相当简单的搜索。声明。它工作正常。有没有办法(和理由)在没有使用Rails Active Record Query Interface的原始SQL的情况下实现这一点?
Activity.where("
user_id = ? OR
category = ? OR
(secondary_id = ? AND secondary_model = ?) OR
(tertiary_id = ? AND tertiary_model = ?)",
user_id, "Announcement", user_id, "user", user_id, "user"
).uniq
答案 0 :(得分:0)
您可以在此处使用Arel。许多rails查询在幕后使用Arel,但您可以直接挂钩。
至于你是否应该,我认为这取决于项目。我们通常使用Arel,这样如果我们改变我们的RDBM,它将负责为我们转换SQL。我认为这不会让它看起来好多了。
您的代码看起来像这样
activities = Activity.arel_table
activities
.where(activities[:user_id].eq(user_id)
.or(activities[:category].eq("Announcement")
.or((activities[:secondary_id].eq("user").and(activities[:secondary_model].eq(user_id))
.or((activities[:tertiary_id].eq("user").and(activities[:secondary_model].eq(user_id)))