1
parent.rb on Rails的4搜索時如何忽略大小寫敏感的,包括嵌套文件與Mongoid
class Parent
include Mongoid::Document
field :name, type: String
field :hobby, type: String
field :born, type: Date
has_many :children
accepts_nested_attributes_for :children
def self.search(search)
if search
any_of({name: search}, {hobby: search})
end
end
end
child.rb:
class Child
include Mongoid::Document
field :name, type: String
field :hobby, type: String
field :born, type: Date
belongs_to :parent
end
parents_controller.rb
class ParentsController < ApplicationController
before_action :set_parent, only: [:show, :edit, :update, :destroy]
# GET /parents
# GET /parents.json
def index
if params[:search].empty?
@parents = Parent.all
else
@parents = Parent.search(params[:search])
end
end
# GET /parents/1
# GET /parents/1.json
def show
end
# GET /parents/new
def new
@parent = Parent.new
end
# GET /parents/1/edit
def edit
end
# POST /parents
# POST /parents.json
def create
@parent = Parent.new(parent_params)
respond_to do |format|
if @parent.save
format.html { redirect_to @parent, notice: 'Parent was successfully created.' }
format.json { render action: 'show', status: :created, location: @parent }
else
format.html { render action: 'new' }
format.json { render json: @parent.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /parents/1
# PATCH/PUT /parents/1.json
def update
respond_to do |format|
if @parent.update_attributes(parent_params)
format.html { redirect_to @parent, notice: 'Parent was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @parent.errors, status: :unprocessable_entity }
end
end
end
# DELETE /parents/1
# DELETE /parents/1.json
def destroy
@parent.destroy
respond_to do |format|
format.html { redirect_to parents_url }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_parent
@parent = Parent.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def parent_params
params.require(:parent).permit(:name, :hobby, :born)
end
end
在產品的index.html.erb中搜索標籤
個<%= form_tag parents_path, :method => 'get' do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
</p>
<% end %>
問題:
- 當我有2名:Alex和小亞歷克斯,當我搜索 「亞歷克斯」,它給我的只有一個結果。但我希望「Alex Jr」也以 作爲搜索結果。
- 我的搜索對大小寫敏感。我想忽略這一點。
- 我希望不僅能夠在主文檔中進行搜索,還能夠在所有級別的嵌套文檔中搜索 。在這種情況下,我將主文檔作爲模型parent.rb並嵌套一個名爲child.rb。所以,例如,當我搜索名字時,我不僅要搜索父母的名字,還要搜索他的孩子。
- 我想通過指定日期範圍添加搜索功能。 例如,查找從A日期到B日期出生的所有記錄。
謝謝。我編輯了第三個問題。我的意思是我想跨越搜索到嵌套(子)文件。現在,我已經解決了問題1,2和4. :) – Askar
嘗試此鏈接:http://stackoverflow.com/questions/652933/rails-searching-multiple-tables-from-one-query。我希望它也適用於mongoid。如果沒有,那麼在將搜索功能添加到Child之後,怎麼樣:@items = Parent.search(params [:search],params [:search_to])+ Child.search(params [:search],params [:search_to])。 rb? – user2503775