从搜索中排除用户的已构建对象

时间:2014-04-02 08:04:27

标签: html sql ruby-on-rails ruby

所以我有一个应用程序,我正在研究两个模型。用户可以创建具有特定特征的对象

我不希望用户能够找到自己的对象。

如何限制查询?

def self.search(search)
where(['primarybreed LIKE ?', "%#{search}%"]).where(:user_id != current_user.id)
end

当前用户违反上述代码。包括会话帮助程序也会破坏代码。

编辑: 控制器

      @dog = Dog.search(params[:search],current_user.id).sample if params[:search].present?

查询:

 def self.search(search, current_user_id)
   where(['primarybreed LIKE and user_id != ?', "%#{search}%", current_user_id])
 end

产生以下错误

wrong number of bind variables (2 for 1) in: primarybreed LIKE and user_id != ?

3 个答案:

答案 0 :(得分:1)

对于Rails 4.x,请使用:

 def self.search(search, current_user_id)
   where(['primarybreed LIKE ?', "%#{search}%").where.not(user_id: current_user_id])
 end

你可以称之为:

@dog = Dog.search(params[:search],current_user.id).sample if params[:search].present?

答案 1 :(得分:0)

可能会解决您的问题

def self.search(search, current_user_id)
where(['primarybreed LIKE and user_id != ?', "%#{search}%",current_user_id])
end

答案 2 :(得分:0)

问题在于语法:

def self.search(search, current_user_id)
  where(['primarybreed LIKE and user_id != ?', "%#{search}%", current_user_id])
end

你通过了2个参数,但查询有1.缺少“?”。添加“?”在LIKE之后再次检查。

def self.search(search, current_user_id)
  where(['primarybreed LIKE ? and user_id != ?', "%#{search}%", current_user_id])
end