簡體   English   中英

可以使用Rails Active Record查詢接口編寫原始SQL嗎? 應該是嗎

[英]Can this raw SQL be written using the Rails Active Record Query Interface? Should it be?

在我的Rails 4應用程序中,我使用以下SQL'OR'語句對我的模型之一進行了非常簡單的搜索。 工作正常。 有沒有任何方法(和理由)可以使用Rails Active Record查詢接口在沒有原始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

您可以在這里使用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)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM