我有两个模型:Business
和Category
。在我的business#index
视图中,所有Business
名称都会显示在表格中,以及相关的Category
。我使用了has_scope
gem,并为我的Business
模型添加了两个范围::by_category
和search
。 search
范围正常。当我从by_category
中选择一个类别并提交表单时,collection_select
范围不会执行任何操作,但如果我在浏览器中将其硬编码到URL中,则可以正常工作。
我注意到的是,如果我对此网址进行硬编码http://host/businesses?by_category=14
则可行。这就是我在日志中看到的内容:
Started GET "/businesses?by_category=14" for 127.0.0.1 at 2015-01-28 11:48:07 -0600
Processing by BusinessesController#index as HTML
Parameters: {"by_category"=>"14"}
但是,当我提交的表单中选择了一个类别时,该网址会显示为http://host/businesses?utf8=%E2%9C%93&search=&category%5Bid%5D=14
。当我以这种方式提交表单时,这就是我在日志中看到的内容:
Started GET "/businesses?utf8=%E2%9C%93&search=&category%5Bid%5D=14" for 127.0.0.1 at 2015-01-28 11:45:57 -0600
Processing by BusinessesController#index as HTML
Parameters: {"utf8"=>"✓", "search"=>"", "category"=>{"id"=>"14"}}
我的表单传递by_category
param的方式有某些错误,但我无法指责它。 任何帮助将不胜感激。这是相关的代码。
型号:
class Business < ActiveRecord::Base
belongs_to :category
...
...
scope :by_category, -> category { where(:category => category) }
scope :search, ->(search) { where(arel_table[:title].matches("%#{search}%")) }
end
class Category < ActiveRecord::Base
has_many :businesses
end
业务总监:
class BusinessesController < ApplicationController
has_scope :by_category
has_scope :search
...
def index
@businesses = apply_scopes(Business).all.page(params[:page])
@categories = Category.all
end
end
商业指数:
....
<%= simple_form_for businesses_path, :method => 'get' do %>
<%= text_field_tag :search, '', placeholder: "Search..." %>
<%= collection_select :category, :id, @categories, :id, :name, :prompt => "Select Category" %>
<%= submit_tag "Search", :name => nil %>
<% end %>
...
答案 0 :(得分:0)
<强>第一强> 请注意,您使用方法提交表单:&#39; get&#39;,这就是您的网址编码的原因。
<%= simple_form_for businesses_path, :method => 'get' do %>
<!-- other code goes here -->
<% end %>
表格应始终以&#39; post&#39;提交。请求不要&#39;得到&#39;
您应该使用方法:: post ,这将为您提供正确的URL参数(正如您在检查期间所期望的那样)。
第二名:
让&#39;假设,此表单已提交到操作搜索:
def search
raise params.inspect
end
当你点击这个特定的动作时启用了上面的raise语句,那么这将列出params(哈希)。然后,您始终可以根据需要获取属性。
希望有所帮助:)