ruby-on-rails - Ransack Rails - 数组中的一个参数
问题描述
我是 Rails 的初学者,我尝试使用 Ransack 过滤结果。我有一个名为“adventures”的模型,它有很多参数,其中“main_activity”。我尝试在我的主页中实现一个表单,您可以在其中键入您正在寻找的活动类型(稍后我将实现一个下拉列表,因此它将仅限于现有活动)。
这是我的 pages_controller 中的内容:
def search
if params[:search].present? && params[:search].strip != ""
session[:bourse_aventuriers_search] = params[:search]
end
arrResult = Array.new
if session[:bourse_aventuriers_search] && session[:bourse_aventuriers_search] != ""
@adventures_main_activity = Adventure.where(active: true).all
else
@adventures_main_activity = Adventure.where(active: true).all
end
@search = @adventures_main_activity.ransack(params[:q])
@adventures = @search.result
@arrAdventures = @adventures.to_a
end
在我的 home.html.erb
<%= form_tag search_path, method: :get do %>
<div class="row">
<div class="col-md-6">
<%= text_field_tag :search, params[:search], placeholder: "Quelle activité ?",
class:"form-control" %>
</div>
目前,无论我在表格中输入什么,我都会在数据库中获得所有的“冒险”;我觉得这是合乎逻辑的,因为我没有更改 1st @adventures_main_activity = Adventure.where(active: true).all
。我不知道如何更改它,以便它只会给我主要活动是我在表单中键入的关键字的冒险。谁能帮我 ?谢谢 :)
解决方案
我认为您的搜索中有很多多余的代码。您的控制器应该只需要 @q 参数,如下所示:
@q = Adventure.ransack(params[:q])
@adventures = @q.result
然后@adventures 将返回任何匹配项作为活动记录。
如果不传递任何参数,则查询将返回所有记录(与 Adventure.all 相同)。
当您提交表单时,ransack 搜索将传递一个“q”参数,该参数将包含所有表单项。你的可能看起来像这样:
"utf8"=>"✓", "q"=>{"search_cont"=>"rock climbing"}, "commit"=>"Search", "controller"=>"adventures", "action"=>"index"
如果您使用调试器,您可以通过在命令行中键入“params”来查看此信息。它也将出现在服务器输出中。
使用我在我的应用程序中所做的示例是我使用的确切代码:
看法:
<%= search_form_for @q do |f| %>
<div class="form-group col-sm-6">
<%= f.label :email_cont, "Email:" %>
<%= f.search_field :email_cont, :placeholder => "Please enter and email to search for", :class => "form-control" %>
</div>
<div class="form-group col-sm-3">
<%= f.submit 'Search', :class => 'btn btn-primary' %>
<%= link_to 'Reset', users_path, :class => 'btn btn-default' %>
</div>
<% end %>
控制器
def index
@q = User.ransack(params[:q])
@users = @q.result(distinct: true).order(:email).page params[:page]
end
这些类只是 Bootstrap CSS,如果您不使用引导程序,则不需要。
编辑
search_form_for @q 必须完全一样,并且必须在参数中设置 @q 才能使其工作。Ransack 对它们非常具体。所以你的@search
@search = @adventures_main_activity.ransack(params[:q])
应该是@q。在您看来,将您的 form_tag 更改为 search_form_for 它应该可以工作。祝你好运。
推荐阅读
- window - 窗口滚动上的移动元素
- angular - Angular CLI:无法读取未定义的属性“写入”
- cmake - CMAKE - 添加库在 foreach 的最后一轮不起作用
- magento - Magento 2 中的 Ultimo 控制台错误
- java - 在 scene2d 中使用距离场字体
- android - 将照片从 android 设备发送到服务器(在 matlab 上处理)
- authentication - .Net Core 2.1 WepAPI 中使用 JWT 的身份验证和授权
- c# - 通过 ListBoxItem 将 ObservableCollection 绑定到 ListBox
- javascript - 如何使用我在测试文件中创建的数组
- ios - 在 PayUmoney Swift 3 中获取哈希不匹配