Rails 4按类别搜索

时间:2014-08-01 02:50:09

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

我想在我的主页上的#home页面上放一个搜索表单。我希望能够按类别搜索我的模型。我无法找到一个解决方案,你实际上将逻辑放在与你正在搜索的模型不同的控制器上。我想知道是否有人可以帮助解决语法和需要去的地方。这是我的关系:

vendor.rb

class Vendor < ActiveRecord::Base
  validates :category_id, presence: true
  belongs_to :category
end

category.rb

class Category < ActiveRecord::Base
  has_one :vendor
end

pages_controller.rb

def home
  @vendors = Vendor.all
end

的routes.rb

root 'pages#home'

我正在尝试将搜索表单放在home.html.erb上,这是在页面布局下。希望有人可以帮助我如何实现这一目标。这(看似)是一种简单的搜索,我希望不必使用宝石。

编辑:答案 对于那些搜索,这是有效的。谢谢@Vla

vendors_controller.rb

def search
  @vendors = Vendor.search(params)
end

pages / home.html.erb (这是我的根'页面#home')

<%= form_tag vendors_search_path, method: :get do |f| %>
  <%= text_field_tag :search, params[:search], placeholder: "Search Vendors" %>
  <%= select_tag 'category', options_for_select(Category.all.map{|el| [el.name, el.id]}) %>
  <%= submit_tag 'Search' %>
<% end %>

routes.rb (请务必将其置于顶部附近)

get 'vendors/search'

厂商/ search.html.erb

<% @vendors.each do |vendor| %>
  <%= vendor.name %>
  <%= vendor.phone %>
  <%= vendor.email %>
<% end %>

1 个答案:

答案 0 :(得分:0)

好的,你可以这样做:

转到您的vendor.rb文件并添加如下搜索方法:

def self.search params    
  vendors = Vendor.where(category_id: params[:category].to_i) unless params[:category].blank?
  vendors
end

然后在您的vendors_controller中创建搜索方法:

def search
  @vendors = Vendor.search(params)
end

然后在主页上创建表格,类似于:

= form_tag search_vendors_path, method: :get, role: 'form' do
  .form-group
    %label Category
    = select_tag 'category', options_for_select(Category.all.map{|el| [el.name, el.id]}), class: 'form-control'
    = submit_tag 'Search'

不要忘了把

get  'vendors/search'

进入您的路线并添加&#34;搜索&#34;图。

如果没有搜索操作,您仍然可以执行相同操作,并在您的主页上显示结果。无论如何,我希望你有这个主意。