我与用户和标签有很多很多关联。我想根据所选的标签复选框向用户显示。这是我在视图中的搜索表单。
<%= form_tag users_path, :method => 'get' do %>
<% @tags.each do |tags| %>
<li><%= check_box_tag "tag_id[]", tags.id %>
<%= tags.name %>
</li>
<% end %>
<%= submit_tag "Search" %>
<% end %>
当我点击几个框时,它会将它们存储在“tag_id”中。我的参数看起来像这样:
params
=> {"utf8"=>"✓",
"tag_id"=>["1", "3"],
"commit"=>"Search",
"action"=>"index",
"controller"=>"users"}
我不能为我的生活弄清楚如何在控制器中搜索。我需要这样的东西:
def index
#psuedo code -- if searching#
@users = User.all.where(#all users that have the selected tag_id's associated with the User. In this example, all users with tag_id's 1 and 3)
else
@tags = Tag.all
@users = User.all
end
我可怜的尝试:
def index
binding.pry
@tags = Tag.all
@users = User.all.where(self.tags)
#@users = User.search(params[:search])
end
答案 0 :(得分:1)
我的回答可能要求你改变一些东西,但是为什么在有宝石的时候会挣扎,你可以用来做你想做的大部分工作(如果不是全部的话)?这是一个Rails演员:http://railscasts.com/episodes/382-tagging?view=asciicast
使用此Gem:Acts-as-taggable-on
https://github.com/mbleigh/acts-as-taggable-on
我唯一没想到的是多个标签,但这应该适合你。
答案 1 :(得分:0)
你认为我的观点很好:) 试试这个:
def index
@users = User.all(joins: :tags, conditions: {tags: {id: params.slice(:tag_id)}})
end
def index
@users = User.includes(:tags).where('tags.id IN ?', params[:tag_id])
end
如果第一个不起作用,第二个应该是u_u,但我很确定第一个。