Рубин на рельсах поиск - PullRequest
0 голосов
/ 12 марта 2012

В настоящее время у меня есть эти 3 метода поиска в моей модели рельсов, все они одинаковы, за исключением того, какое поле они ищут (взгляните на 5-ю строку внутри каждого метода).

def self.search(*args)
  return [] if args.blank?
  cond_text, cond_values = [], []
  args.each do |str|
  next if str.blank?  
  cond_text << "( %s )" % str.split.map{|w| "game_name LIKE ? "}.join(" OR ")
  cond_values.concat(str.split.map{|w| "%#{w}%"})
end
all :conditions =>  [cond_text.join(" AND "), *cond_values]
end

def self.gensearch(*args)
  return [] if args.blank?
  cond_text, cond_values = [], []
  args.each do |str|
  next if str.blank?  
  cond_text << "( %s )" % str.split.map{|w| "genre LIKE ? "}.join(" OR ")
  cond_values.concat(str.split.map{|w| "%#{w}%"})
end
all :conditions =>  [cond_text.join(" AND "), *cond_values]
end

def self.consearch(*args)
  return [] if args.blank?
  cond_text, cond_values = [], []
  args.each do |str|
  next if str.blank?  
  cond_text << "( %s )" % str.split.map{|w| "console LIKE ? "}.join(" OR ")
  cond_values.concat(str.split.map{|w| "%#{w}%"})
end
all :conditions =>  [cond_text.join(" AND "), *cond_values]
end

Теперь я хочу объявить эти три в контроллере, а затем отобразить их на странице приложения. Это работает для одного, но моя проблема в том, что я не знаю, какие переменные поместить куда для двух других. Я узнал первый из основного поиска. Я хотел бы сохранить их как три отдельных поиска.

В настоящее время в моем контроллере есть следующее:

   @games = Game.search(params[:search])
   @games = Game.gensearch(params[:search]) 
   @games = Game.consearch(params[:search])

и следующее на мой взгляд:

                        <div id="sidehead"><h2><%= t('.search') %></h2></div>
                        <div id="searching" >
                                <%= form_tag games_path, :controller => 'games', :action => 'search', :method => 'get' do %>
                                <%= text_field_tag :search, params[:search] %>
                                <%= submit_tag t('.searchb'), :game_name => nil %>
                            <% end %>   
                        </div>

                        <div style="clear: both;"/>

                        <div id="sidehead"><h2><%= t('.search') %></h2></div>
                        <div id="searching" >
                                <%= form_tag games_path, :controller => 'games', :action => 'gensearch', :method => 'get' do %>
                                <%= text_field_tag :search, params[:search] %>
                                <%= submit_tag t('.searchb'), :game_name => nil %>
                            <% end %>   
                        </div>

                        <div style="clear: both;"/>

                        <div id="sidehead"><h2><%= t('.search') %></h2></div>
                        <div id="searching" >
                                <%= form_tag games_path, :controller => 'games', :action => 'consearch', :method => 'get' do %>
                                <%= text_field_tag :search, params[:search] %>
                                <%= submit_tag t('.searchb'), :game_name => nil %>
                            <% end %>   
                        </div>

Я хочу взять последние две части (контроллер, представление) и выполнить их три раза, по одной для каждого из методов поиска, но с соответствующими переменными, любая помощь будет полезна и даст дополнительные знания.

Спасибо.

1 Ответ

1 голос
/ 13 марта 2012

Легко! каждая функция поиска возвращает массив, поэтому вы просто добавляете три массива:)

@games = Game.search(params[:search]) + Game.gensearch(params[:search]) + Game.consearch(params[:search])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...