对于允许用户通过输入演员姓名来搜索电影的电影网站,我引用了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
答案 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