如何在搜索中显示两个不同的对象?

时间:2010-04-07 22:07:11

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

github url

我正在使用显示搜索结果的简单搜索:

@adds = Add.search(params[:search])

除了搜索结果之外,我正在尝试使用nearbys()方法,该方法显示接近搜索结果的对象。以下方法显示接近2的对象,但不显示对象2.如何将对象2与附近的对象一起显示?

@adds = Add.find(2).nearbys(10)

虽然上面的代码有效,但当我使用搜索时,@adds = Add.search(params[:search]).nearbys(10)会返回no方法错误,undefined method nearbys'for Array:0x30c3278`

如何在模型中搜索对象并使用nearbys()方法并显示返回的所有结果?

模型

def self.search(search)
    if search
      find(:all, :conditions => ['address LIKE ?', "%#{search}%"])
      # where('address LIKE ?', "%#{search}")
    else
      find(:all)
    end
  end

2 个答案:

答案 0 :(得分:1)

当你找到(2)时,会返回一个模型对象,但如果找到(:all),则会返回数组。

nearbys方法仅适用于模型对象的实例。如果您的搜索方法返回10个地址的数组怎么办?你不能只是在阵列附近调用,你必须通过你的阵列循环并在附近应用于循环中产生的每个地址。​​

答案 1 :(得分:0)

如果没有看到您附近的方法,我可以说这是scoped的完美用例:

def self.search(term)
  if term
    scoped({ :conditions => ["address LIKE ?", term] })
  else
    scoped({})
  end
end

如果在类上定义nearby,我会认为它会像这样使用:

Model.search("pizza").nearby

是您的范围。