首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Mongoid on Rails 4进行搜索,不仅可以搜索字符串字段,还可以搜索日期范围

使用Mongoid on Rails 4进行搜索,不仅可以搜索字符串字段,还可以搜索日期范围
EN

Stack Overflow用户
提问于 2013-07-01 14:08:47
回答 2查看 814关注 0票数 0

parent.rb

代码语言:javascript
运行
复制
class Parent
  include Mongoid::Document
  field :name, type: String
  field :hobby, type: String
  field :born, type: Date

  embeds_many :children
  accepts_nested_attributes_for :children
end

children.rb

代码语言:javascript
运行
复制
class Child
  include Mongoid::Document
  field :hobby, type: String
  field :name, type: String
  field :born, type: Date

  embedded_in :parent
end

parents_controller.rb

代码语言:javascript
运行
复制
class ParentsController < ApplicationController
  before_action :set_parent, only: [:show, :edit, :update, :destroy]

  # GET /parents
  # GET /parents.json
  def index
    @parents = Parent.all
  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:

代码语言:javascript
运行
复制
<h1>Listing parents</h1>

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Born</th>
      <th></th>
      <th></th>
      <th></th>
    </tr>
  </thead>

  <tbody>
    <% @parents.each do |parent| %>
      <tr>
        <td><%= parent.name %></td>
        <td><%= parent.born %></td>
        <td><%= link_to 'Show', parent %></td>
        <td><%= link_to 'Edit', edit_parent_path(parent) %></td>
        <td><%= link_to 'Destroy', parent, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

<br>

<%= link_to 'New Parent', new_parent_path %>

我想实现一个搜索功能,不仅可以在主文档中搜索,还可以在嵌套文档中搜索。不仅可以在文本字段中搜索,还可以使用日期范围进行搜索。有没有人能给我一些关于这方面的资源(教程)?我找不到任何像Ryan的简单搜索铁路广播的东西。如果有人能告诉我如何修改我的控制器和index.html.erb文件,我将非常感激。

在github https://github.com/mongoid/mongoid/blob/master/lib/mongoid/contextual/text_search.rb中还有一个与搜索相关的Durran页面。但坦率地说,这并没有给出任何线索来解决我的问题。

EN

Stack Overflow用户

回答已采纳

发布于 2013-07-01 18:21:58

感谢@Pierre-Louis Gottfrois的建议,帮助我做了一些进一步的研究。

我可以搜索两个字段(名字和爱好),如下所示。

我已经在产品的index.html.erb上添加了:

代码语言:javascript
运行
复制
<%= form_tag parents_path, :method => 'get' do %>
<p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", :name => nil %>
</p>
<% end %>

然后在parent.rb模型中,考虑到@Pierre-Louis的建议,我进行了更改:

代码语言:javascript
运行
复制
def self.search(search)
    if search
        any_of({name: search}, {hobby: search})
    end
  end

products_controller.rb已更改:

代码语言:javascript
运行
复制
def index
    if params[:search].empty?
      @parents = Parent.all
    else
      @parents = Parent.search(params[:search])
    end
end

有3个问题仍然存在,我认为最好把它们分开放在不同的帖子里:

在搜索时如何忽略区分大小写

  1. 如何在搜索时包括嵌套日期如果包含search-keyword

,则通过指定

documents

  1. Ability作为结果来搜索要搜索的任何单词
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17398326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档