需要一些帮助
我有一个用户模型和一个具有has_one关系的个人资料模型(用户有一个个人资料,个人资料只属于一个用户,非常基本,非常简单)。
我想做那样的事情:
User.search({:profile_last_name_or_profile_first_name_cont_any=> 'jane doe'.split(' ')}).result
生成的SQL是以下
"SELECT "users".* FROM "users" LEFT OUTER JOIN "profiles" ON "profiles"."user_id" = "users"."id" WHERE ((("profiles"."last_name" ILIKE '%jane%' OR "profiles"."last_name" ILIKE '%doe%') OR ("profiles"."first_name" ILIKE '%jane%' OR "profiles"."first_name" ILIKE '%doe%')))"
返回预期结果...但是如何在我的搜索表单(在我的视图中)和/或在我的控制器中实现此请求?
我的搜索表单是:
<%= search_form_for @q, url: search_cockpit_users_path, method: 'post', id: 'users-search-form', class: 'span3 pull-right' do |su| %>
<%= su.text_field :profile_last_name_or_profile_first_name_or_email_cont_any, :placeholder => 'full name or email contains' %>
<%= su.submit 'Search', :name => nil, :class => 'btn ' %>
<% end %>
因为返回的SQL是
"SELECT "users".* FROM "users" LEFT OUTER JOIN "profiles" ON "profiles"."user_id" = "users"."id" WHERE ((("profiles"."last_name" ILIKE '%jane doe%') OR ("profiles"."first_name" ILIKE '%jane doe%')))"
但是如何实现split('')以获得预期的SQL?
任何帮助(以及一些解释)都会很棒,文档对这个主题有点了解......
干杯
编辑来自wintermeyer的评论
@wintermeyer 以下是您要求的代码片段。我真的不明白为什么你需要它们,问题不在搜索过程中,只用一个单词就可以正常工作。我的问题是如何拆分查询字符串以获得预期生成的SQL。
涉及的控制器部分是
class Cockpit::UsersController < ApplicationController
def index
@q = User.joins(:profile).search(params[:q])
@pp = params[:pp] ? params[:pp].to_i : 10
@users = @q.result.paginate(:per_page => @pp, :page => params[:page])
respond_to do |format|
format.html # index.html.erb
format.json { render json: @users }
format.js { @users }
end
end
def search
@q = User.joins(:profile).search(params[:q])
@pp = params[:pp] ? params[:pp].to_i : 10
@users = @q.result.paginate(:per_page => @pp, :page => params[:page])
render "index"
end
end
路线的一部分
namespace :cockpit do
root :to => "dashboard#index"
resources :users do
member do
get 'toggle_remove'
end
collection do
get 'bulk'
match 'search', to: "users#search", via: [:get, :post], as: 'search'
end
resources :profiles
end
end