Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 未提供搜索表单所需的搜索对象_Ruby On Rails_Ruby On Rails 4_Ransack - Fatal编程技术网

Ruby on rails 未提供搜索表单所需的搜索对象

Ruby on rails 未提供搜索表单所需的搜索对象,ruby-on-rails,ruby-on-rails-4,ransack,Ruby On Rails,Ruby On Rails 4,Ransack,我知道其他人也问过这个错误,但这与另一种情况有关 我为rails 4添加了Ransack gem,并捆绑安装了: gem "ransack", github: "activerecord-hackery/ransack", branch: "rails-4" 我还对我的控制器进行了如下编辑(recipes\u controller): 然后,我在表格中添加了以下内容(食谱/索引): 在这一行: <%= search_form_for @q do |f| %> 这是否与安装有关

我知道其他人也问过这个错误,但这与另一种情况有关

我为rails 4添加了Ransack gem,并捆绑安装了:

gem "ransack", github: "activerecord-hackery/ransack", branch: "rails-4"
我还对我的控制器进行了如下编辑(recipes\u controller):

然后,我在表格中添加了以下内容(食谱/索引):

在这一行:

<%= search_form_for @q do |f| %>


这是否与安装有关?

只有当请求包含“q”参数时,@q对象才会初始化

您应该尝试将操作索引减少为以下形式:

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

Nicolas是对的,错误来自
@q
,只有在请求包含“q”参数时才被初始化。这就是为什么在提交表单之前会出现错误(没有“q”参数)

另一种解决方法是初始化
@q

在你的应用程序中,你可以使用你的控制器

def set_search
@q=Recipe.search(params[:q])
end
在你的食谱里
before\u filter:set\u search

感谢@emaillenin的编辑。有什么建议吗?用“搜索”代替“搜索”能解决问题吗?def index@q=Recipe.ransack(search_params)@recipes=@q.result(distinct:true).paginate(page:params[:page],per_page:10)endHi@Nicolas谢谢你的回答。我试图实现这一点,但我仍然得到相同的错误。索引页甚至不会加载,因此在提交表单之前我会收到错误信息。
<%= search_form_for @q do |f| %>
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
def set_search
@q=Recipe.search(params[:q])
end