0

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

供应商.rb

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

类别.rb

class Category < ActiveRecord::Base
  has_one :vendor
end

pages_controller.rb

def home
  @vendors = Vendor.all
end

路线.rb

root 'pages#home'

我正在尝试将搜索表单放在页面布局下的 home.html.erb 上。希望有人可以帮助我如何做到这一点。这是(看似)一种简单的搜索类型,我希望不必使用 gem。

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

vendor_controller.rb

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

pages/home.html.erb(这是我的根'pages#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 %>
4

1 回答 1

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'

进入您的路线并添加“搜索”视图。

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

于 2014-08-01T08:59:46.647 回答