2

好吧,我有多个模型,我想让客户在客户表和事件表上搜索这是我的模型

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

哪个返回事件查询,但我想同时返回它们,如何组合查询?

更新:

这正是我想要做的,同时搜索多个模型,例如客户和事件。

我在模型搜索中定义了 def self.search(search) 并且我有一个控制器

class SearchesController < ApplicationController
   def query
     #@results = Search.new(params[:search][:query]).results
     @results = Search.search(params[:query])
   end

我想在我的模型中查看客户和事件,不知道该怎么做

这是一个视图示例,不确定它是对还是错

<h1>Search Results</h1>
<% @results.each do |result| %>
    <div>
    <%= result.first_name %>
    <% if admin? %>
        <%= link_to 'Show', '#' %>
        <%= link_to 'Edit', '#' %>
        <%= link_to 'Destroy', '#' %>
    <% end %>
    </div>

    <div>
    <%= result.title %>
    <% if admin? %>
        <%= link_to 'Show', '#' %>
        <%= link_to 'Edit', '#' %>
        <%= link_to 'Destroy', '#' %>
    <% end %>
    </div>
<% end %>
4

2 回答 2

2

在我看来,更好的方法是将每种类型的结果存储在实例变量中,而不是组合数据集。我这样说是因为我怀疑您的客户和事件表是相同的。

class SearchesController < ApplicationController
   def query
     @customers = Customer.where('first_name LIKE ?', params[:query])
     @events = Event.where('title LIKE ?', params[:query])
   end

在您的视图中,您可以显示在客户中找到的结果和在事件中找到的结果。

于 2012-08-09T16:35:27.900 回答
1

在 ruby​​ 方法中返回最后一条语句的值。我不知道你所说的“组合”是什么意思。如果哈希没问题:

def self.search(search)
  if search
    {customers: Customer.find(:all, :conditions => ['first_name LIKE ?', "%#{search}%"]),
    events: Event.find(:all, :conditions => ['title LIKE ?', "%#{search}%"])}
   else
     {customers: Customer.find(:all),
     events: Event.find(:all)}
   end
end
于 2012-08-09T16:27:15.560 回答