【发布时间】:2014-01-26 20:27:03
【问题描述】:
我正在实现搜索,并希望让用户可以选择多个复选框来搜索这些选项。选择多个复选框时,将使用AND操作符,因此将返回所选每个选项的所有记录。
在选择一个复选框时,下面的代码会在选择一个复选框时,但它始终选择多个复选框时返回0个记录。你能帮忙吗?
代码如下:
用户.rb
has_many :marketing_assets
has_many :marketing_platforms, through: :marketing_assets
def self.has_platform(platform_object)
where('marketing_platforms.name = ?', platform_object)
end
def self.search_for_platforms(platforms)
@platforms = MarketingPlatform.all
platforms_query_string = User
platforms.each do |platform|
@platforms.each do |platform_from_table|
if platform == platform_from_table.name
platforms_query_string = platforms_query_string.has_platform(platform_from_table.name)
end
end
end
return platforms_query_string
end
experts_controller.erb
class ExpertsController < ApplicationController
layout 'experts'
def index
@marketing_platforms = MarketingPlatform.all
if params[:marketing_platforms_p].present?
@users = User.joins(:marketing_platforms).search_for_platforms(params[:marketing_platforms_p])
#@users = User.search_for_platforms(params[:marketing_platforms_p])
else
@users = User.text_search(params[:query]).page(params[:page]).per_page(10)
end
end
def show
@user = User.find(params[:id])
end
end
experts.index.html.erb
<h1>Search</h1>
<%= params %>
<%= form_tag experts_path, method: :get do %>
<p>
<%= text_field_tag :query, params[:query] %>
<hr>
<h3>Marketing Assets</h3>
<% MarketingPlatform.all.each do |platform| %>
<%= check_box_tag "marketing_platforms_p[]", "#{platform.name}",
((params[:marketing_platforms] != nil) && (params[:marketing_platforms].index(platform.name) != nil) ? true : false) %>
<%= platform.name %>
<% end %>
<hr>
<%= submit_tag 'Search', class: 'btn btn-primary', name: nil %>
<%= link_to 'Find All', experts_path %>
</p>
<% end %>
<h3>Results</h3>
<table class="table">
<thead>
<tr>
<th>First name</th>
<th>Last name</th>
<th>Company</th>
<th>Job title</th>
<th>Country</th>
<th>Email</th>
<th></th>
</tr>
</thead>
<tbody>
<%= @users.count %>
<% @users.each do |user| %>
<tr>
<td><%= user.first_name %></td>
<td><%= user.last_name %></td>
<td><%= user.company %></td>
<td><%= user.job_title %></td>
<td><%= user.country %></td>
<td><%= user.email %></td>
<td><%= link_to 'Show', expert_path(user) %></td>
</tr>
<% end %>
</tbody>
</table>
正在执行的SQL是
SELECT COUNT(*) FROM "users" INNER JOIN "marketing_assets" ON "marketing_assets"."user_id" = "users"."id" INNER JOIN "marketing_platforms" ON "marketing_platforms"."id" = "marketing_assets"."marketing_platform_id" WHERE (marketing_platforms.name = 'Google+') AND (marketing_platforms.name = 'Facebook')
【问题讨论】:
-
你有什么问题?
-
嗨@depa 我已经添加了这个问题。对此感到抱歉
标签: sql ruby-on-rails ruby-on-rails-4 where-clause active-record-query