可以使用Rails Active Record Query Interface编写这个原始SQL吗?应该是吗?

时间:2015-08-14 00:47:12

标签: sql ruby-on-rails postgresql activerecord

在我的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

1 个答案:

答案 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)))