搜索表单包含多个条目collection_select

时间:2012-08-26 14:54:02

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

对于允许用户通过输入演员姓名来搜索电影的电影网站,我引用了Railscast on Advanced Search Forms,但是在同一参数中搜索多个条目时遇到了困难。 (即多个演员条目)。

下面的代码允许选择多个actor,但我不确定如何重写模型代码以允许多个actor_id。

反馈非常感谢!

的搜索/ new.html.erb

<%= f.label :actor_id %>
<%= f.collection_select :actor_id, Actor.order(:name), :id, :name, {}, {:multiple => true}%>

search.rb

def movies
  @movies ||= find_movies
end

private
  def find_movies
    movies = movies.where(actor_id: actor_id)
  end

1 个答案:

答案 0 :(得分:1)

由于您要在数据库中保存这些查询,请尝试以下

  def find_movies
     movies = Movie.order(:name)
     movies = movies.where(actor_id: actor_id) if actor_id.present?
  end

不保存查询即可实现此

在你的search.rb

    def find_movies(actors)
       movies = Movie.where(:actor_id => actors)
    end

然后在您发送参数的控制器操作中

  find_movies(params[:actor_id])

修改

从您的actor_id中提取ID使用此

   ["actor_id", ["", "1", "2"]][1].delete_if {|f| f == ""}

所以你的方法应该是这样的

  def find_movies
      ids = self.actor_id[1].delete_if {|f| f == ""}
      movies = Movie.order(:name)
      movies = movies.where(actor_id: ids) if actor_id.present?
  end