【问题标题】:Rails search form that can search for many attributes of multiple modelsRails 搜索表单,可以搜索多个模型的许多属性
【发布时间】:2016-01-13 17:43:38
【问题描述】:

我正在创建一个 Rails 应用程序,用户可以在其中发布指向他们在网络上拥有的实时网站的链接,以及该网站的内容和编程语言。

我正在尝试创建一个可以搜索一些内容的搜索表单:

(1) 发布链接的URL (2) 编程语言 (3) 用户名​​

我有一个链接和一个用户模型。

class Link < ActiveRecord::Base
belongs_to :user

    def self.search(search)
        where("language LIKE ?", "%#{search}%")
        where("url LIKE ?", "%#{search}%")
    end
end

class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

has_many :links

def self.search(search)
    where("name LIKE ?", "%#{search}%")
end
end

My User 和 Link 控制器索引方法如下:

class LinksController < ApplicationController
before_action :set_link, only: [:show, :edit, :update, :destroy, :upvote]
before_filter :authenticate_user!, except: [:index, :show]

def index
    @links = Link.search(params[:link])
end

class UsersController < ApplicationController

def index
    @users = User.search(params[:user])
end

我将如何将所有搜索职责委派给单个搜索栏。本质上,我只想让搜索栏能够搜索我上面提到的 3 个属性。我打算把它放在 index/layouts/application.html.erb 文件夹中。

感谢您的帮助!

【问题讨论】:

  • 据我了解,您需要一个页面来搜索用户和链接。对吗?
  • 是的,这正是我想要做的

标签: ruby-on-rails ruby-on-rails-4 search-form


【解决方案1】:

如果我理解正确的话:

您应该为搜索页面创建控制器,例如 SearchController 仅使用 index 操作。

比创建类似 Search.rb 的模型

Search = Struct.new(:search_text) do
  def run
    users = User.where(name: search_text)
    links = Link.where(title: search_text)
    {users: users, links: links}
  end
end

控制器:

def index
  @result = Search.run(params[:search])
end

所以这只是一个例子,你应该根据你的需要修改它。

编辑

在视野中(苗条):

b User List
ul
  - @result[:users].each |user|
    = user.name

links 也一样

【讨论】:

  • 我要试试这个。我将如何在我的视图中呈现它?
【解决方案2】:

如果您有大量数据,您可能希望查看一个更复杂的解决方案是 SQL 中的 freetext search

可以跨多个表执行此操作,并将其与thoughtbot in their blog 所述的rails 集成。

【讨论】:

  • 听起来很有趣,我会研究一下
猜你喜欢
  • 1970-01-01
  • 2012-08-02
  • 2014-11-02
  • 2011-01-03
  • 2014-01-30
  • 1970-01-01
  • 2012-07-19
  • 2012-12-05
相关资源
最近更新 更多