Rails 3:按名字和名字搜索用户?

时间:2011-05-02 14:31:53

标签: ruby-on-rails

我想在我的用户模型中编写一个简单的搜索方法,它会检查agisnt的第二个名字和名字,并返回匹配的用户。我现在有这个,但抛出一个错误:

  def self.search(search)
    if search
      where("first_name like ? or second_name like ?", "%#{search}%")
    else
      all
    end
  end

错误是:wrong number of bind variables (1 for 2) in: first_name like ? or second_name like ?

我该如何解决这个问题?

谢谢

2 个答案:

答案 0 :(得分:3)

您有两个?,这意味着where方法需要两个参数:

def self.search(search)
  if search
    where("first_name like ? or second_name like ?", "%#{search}%", "%#{search}%")
  else
    all
  end
end

我不确定你是否可以简化那些like以使用一个参数而不是重复的两个参数,但是你可以将它清理一下:

def self.search(search)
  if search
    q = "%#{search}%"
    where("first_name like ? or second_name like ?", q, q)
  else
    all
  end
end

答案 1 :(得分:2)

您可以使用

where("first name like :name or second name like :name", :name => "%foo%")