RoR直接在.where中的sql条件

时间:2012-10-02 17:10:20

标签: mysql ruby-on-rails ruby-on-rails-3

我有什么:

带有.where

的条件sql请求
.where(:users => {:articles => {...}, :settings => {...}, ...})

我需要什么:

其他条件,id的{​​{1}}不等于:users

我尝试了什么:

@user.id

问题是什么:

语法

3 个答案:

答案 0 :(得分:2)

您可以尝试的内容:

.where(:users => {:articles => {...}, :settings => {...}, ...}).where('users.id != ?', @user.id)

答案 1 :(得分:1)

我有一个属于Place的事实模型,这可行:

Fact.includes(:place).where("places.id != 5")

答案 2 :(得分:1)

整个语法可以做得更好

@users = User.scoped
if you_have_conditions_on_articles
  @users = @users.join(:articles).where(...conditions_on_article...)
end
if you_have_conditions_on_settings
  @users = @users.join(:settings).where(...conditions_on_settings...)
end
if you_need_to_exclude_user
  @users = @users.where('id != ?', @user.id)
end

@users

这将创建一个正确的查询,您可以避免在不需要时添加条件。

在循环之前不会执行查询(因此,如果查询未在任何视图中使用,则根本不会执行)。