I am trying to pass my ransack params[:q] object to my presenter class but getting the No Ransack::Search object was provided to search_form_for! error.
Here is my sample code
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'
controller => 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
Right now I just added basic code snippet but it is the generalized scenario. Please let me know any one has implemented this type of scenario.
you need a spell Flat Scope, like this
def define_methods
 shared = 0
 Kernel.send :define_method, :counter do
  shared
 end
 Kernel.send :define_method, :inc do |x|
  shared += x
 end
end
you can read 《Metaprogramming Ruby》
It seems to me @search variable is nil in this code:
= search_form_for @search, :url => admin_client_managers_widgets_path do 
|f|
Because @search is an instance variable of ClientManagerDashboard.  For example this should work:
class ClientManagerDashboard
  .. 
  def get_search
    @search = User.joins(:client).where(clients: {id: clients}).search(search_params)
  end
  ..
end
And in your view:
= search_form_for @client_manager_dashboard.get_search, :url => admin_client_managers_widgets_path do |f|
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With