0

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

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

反馈将不胜感激!

搜索/new.html.erb

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

搜索.rb

def movies
  @movies ||= find_movies
end

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

1 回答 1

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
于 2012-08-26T17:06:27.787 回答