繁体   English   中英

Rails 4从“主页”搜索到其他模型/控制器

[英]Rails 4 search from “home page” to other models/controllers

更新4-6-2015:

在此处再次检查: https : //github.com/activerecord-hackery/ransack

为了确保我一切正常,除了一些打few之外,我认为我做到了。 我不清楚f.submit如何或什么使f.submit自动将用户带到该模型索引,而该模型中没有填充任何东西,并且索引动作具有先验性(因此,搜索后将我带到组的索引视图(我正在搜索的内容),并显示db中的所有内容,就好像调用Group.all时完全忽略了搜索字符串(我可以在地址栏中看到的那样)。

真的不确定我缺少什么,我确定这对我来说有点愚蠢。

编辑/更新:因此,我可以完成大部分工作,搜索屏幕将转到该控制器。 我不确定是什么自动魔术造成的,我以为我的response_to可以捕获并发送回json,所以我可以通过ajax调用来完成此操作并更新主页中的表。 然后,如果他们单击该表,则会将他们带到该特定项目的编辑表单(即,正确模型的编辑)。 我的visitor_controller.rb

 def index              
     @search = Group.ransack(name_cont: params[:q])
     @groups = @search.result
      respond_to do |format|
       format.html 
       format.js
     end 
end

也添加路由文件:

Rails.application.routes.draw do
  resources :groups
  get 'visitors', to: 'visitors#index'
  root to: 'visitors#index'
end

因此,组是我要搜索的控制器/模型(其中一个,当我首先得到一个时,将使用答案中的示例进行很多操作。)

因此,我在构建一个应用程序时,发现了Rails 4的“简单搜索”教程:

http://www.stefanosioannou.com/rails-4-simple-search-form/

但是我认为这是假设您要从视图/模型以及所有控制器中进行搜索。 即我在群组视图中,我想通过该控制器搜索所有群组。

确实,我正在做并且很难做的是有一个欢迎页面,其中包含三个搜索栏。 每个栏搜索不同的模型/视图/控制器。

欢迎页面称为访客,它具有自己的控制器,并且仅查看任何模型。

因此,我的访客控制器具有以下功能:

class VisitorsController < ApplicationController
  def index
     @groups = Group.search(params[:gsearch])
      respond_to do |format|
       format.html 
       format.js
     end 
  end
end

我只是想让一个搜索栏适用于我的组模型,因此在我的访问者index.html.erb中:

<div class="span12">
<h3>Welcome IPA of NM</h3>
<!-- search bar here -->
 <% form_tag group_path, :method => 'get' do %>
    <p>
        <%= text_field_tag :gsearch, params[:search] %>
        <%= submit_tag "Search Groups", :name => nil %>
    </p>
<% end %>
</div>

虽然失败,但它说

No route matches {:action=>"show", :controller=>"groups"} missing required keys: [:id]

所以这是我的网上论坛管理员:

class GroupsController < ApplicationController  
    before_action :set_group, only: [:show, :edit, :update, :destroy]

    def show
    end

 private
     # Use callbacks to share common setup or constraints between actions.
     def set_group
       @group = Group.find(params[:id])
     end
end

我确定以某种方式访问​​者index.html.erb中的表单代码可以与该group_path一起使用,这意味着它正在尝试显示,但刚开始时还没有ID? 我真的迷路了,不熟悉Rails4,也不知道我在这里想念的是什么。 我猜测惯例是在您的模型/视图/控制器中做所有事情,而不是像我在这里尝试的那样做交叉视图? 因此,我需要做些额外的事情来避开约定,否则我一开始就做错了整个事情?

我强烈建议Ransack在Rails中进行搜索查询。 您可以在此处查看它> https://github.com/activerecord-hackery/ransack ,也可以在http://railscasts.com/episodes/370-ransack上观看Ryan Bates制作的超棒轨道

Ransack全面运作,您甚至可以从同一表格搜索所有3个型号。

使用ransack,您只需使用:

<%= search_form_for @q do |f| %>

  # Search if the models name field contains...
  <%= f.label :name_cont %>
  <%= f.search_field :name_cont %>

  <%= f.submit %>
<% end %>

然后,搜索控制器将其处理为@results:

  def index
        @q = params[:q]

        @search = Model.search(name_cont: @q)   
        @results = @search.result
    end

然后,您将在“显示/索引”页面上浏览结果。

<% @results.each do |result| %>
    <%= result.name
<% end %>

这将在一个搜索页面上显示所有结果。 如果要搜索多个模型,则可以使用多种形式为每个模型分配不同的实例变量,例如: @q1 @q2 @q3或者可以通过使用不同的实例变量进行搜索和结果从一个模型中全部搜索它们。例如

def index
    @q = params[:q]

    @firstsearch = User.search(username_cont: @q)
    @secondsearch = Post.search(title_or_description_cont: @q)

    @users = @firstsearch.result
    @posts = @secondsearch.result
end

记得添加路线=)

get 'search', to: 'search#index'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM