Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass ransack param[:q] object to another method in rails

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.

like image 586
shrikant1712 Avatar asked Oct 25 '25 11:10

shrikant1712


2 Answers

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》

like image 197
alchemist Avatar answered Oct 28 '25 02:10

alchemist


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|
like image 29
lunr Avatar answered Oct 28 '25 03:10

lunr