No se proporcionó ningún objeto Ransack :: Search a search_form_for

Me doy cuenta de que otras personas han preguntado acerca de este error, pero tenía que ver con una circunstancia diferente.

He agregado la gem Ransack para los Rails 4 y he instalado con:

gem "ransack", github: "activerecord-hackery/ransack", branch: "rails-4" 

También he editado mi controlador de la siguiente manera (recipes_controller):

 def index if params[:tag] @all_recipes = Recipe.tagged_with(params[:tag]) else @all_recipes = Recipe.all end if signed_in? @user_recipes = current_user.recipes.order("created_at DESC").paginate(page: params[:page], :per_page => 10) end if params[:q] @q = Recipe.search(params[:q]) @all_recipes = @q.result(distinct: true) end end 

Luego he añadido en el formulario de la siguiente manera (recetas / índice):

      

Estoy recibiendo el siguiente error :

 No Ransack::Search object was provided to search_form_for! 

en esta linea:

  

¿Sería esto algo que ver con la instalación?

Nicolas tenía razón en que el error proviene de @q solo se inicializó cuando la solicitud contiene un parámetro “q”. Por eso, antes de enviar el formulario, aparece el error (sin el parámetro “q”).

Otra forma de @q esto es inicializando @q

en tu aplicación_controller

 def set_search @q=Recipe.search(params[:q]) end 

en tu recipes_controller before_filter :set_search

El objeto @q solo se inicializa cuando la solicitud contiene un parámetro “q”.

Debe intentar reducir el índice de acción a la forma de:

 def index @q = Recipe.search(search_params) @recipes = @q.result(distinct: true).paginate(page: params[:page], per_page: 10) end private def search_params default_params = {} default_params.merge({user_id_eq: current_user.id}) if signed_in? # more logic here params[:q].merge(default_params) end