Ruby on rails 未提供搜索表单所需的搜索对象
我知道其他人也问过这个错误,但这与另一种情况有关 我为rails 4添加了Ransack gem,并捆绑安装了: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| %> 这是否与安装有关
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