【发布时间】:2015-03-27 07:00:38
【问题描述】:
我正在尝试将我的 ransack params[:q] 对象传递给我的演示者类,但收到 No Ransack::Search object was provided to search_form_for! 错误。
这是我的示例代码
client_managers_widgets/index.html.haml
= search_form_for @search, :url => admin_client_managers_widgets_path do |f|
= render :partial => "admin/share/filter_wrapper", :locals => { :f => f, :filter=> "admin/client_managers_widgets/filters/redemption_filter" }
_redemption_filter.html.haml
%table.filters
%tr
%td
= f.label :created_at_gteq, "Select Period"
= f.select :created_at_gteq, { "Start Till Date" => "", "This Year" => Date.today.beginning_of_year, "Last Month" => 1.month.ago.beginning_of_month, "This Month" => Date.today.beginning_of_month }
%td
= f.label :user_telecom_circle_regional_managers_id_eq, "Region"
= f.collection_select :user_telecom_circle_regional_managers_id_eq, @telecom_regions.select_options, :id, :region, {:include_blank => t(:all)}, :class => 'telecom_circle_regional_managers_id_eq'
%tr
%td
= f.label :created_at_date_gteq,"Select Custome Time"
= f.text_field :created_at_date_gteq, :class => 'datepicker input-small'
= f.label "-", :class=>"to"
= f.text_field :created_at_date_lteq, :class => 'datepicker input-small'
控制器 => client_managers_widgets
def index
@client_manager_dashboard = ClientManagerDashboard.new(current_admin_user, search_params)
@users = @client_manager_dashboard.get users
# .
# .
# .
end
private
def search_params
params[:q]
end
presenter => client_manager_dashboard
class ClientManagerDashboard
def initialize(admin_user, search_params)
@current_ability = Ability.new(admin_user)
@search_params = search_params
end
def get_users
@search = User.joins(:client).where(clients: {id: clients}).search(search_params)
@users = @search.result
end
private
def current_ability
@current_ability
end
def search_params
@search_params
end
end
现在我只是添加了基本代码 sn-p 但它是通用场景。 请让我知道任何人已经实现了这种类型的场景。
【问题讨论】:
-
您是否尝试过使用
binding.pry单步执行?搜查也需要params[:q]还是只需要params?最后,您是否尝试过通过@search_params自行搜索? -
@MikeManfrin,是的,我将
@search_params传递给了搜索,它运行良好。 -
这证实了我的预感;尝试让您的 search_params 方法返回
@search_params ||= @search_params -
@MikeManfrin,我试过了,但遇到了同样类型的问题。我之所以这么想是因为我没有在控制器操作中提到 Search object (like @search=Product.search(params[:q]) )。
标签: ruby-on-rails ruby-on-rails-3 ransack