【问题标题】:rails filter boolean attributerails filter 布尔属性
【发布时间】:2020-04-11 21:43:00
【问题描述】:

我需要在我的搜索表单中添加过滤器。我需要我的搜索可以过滤有“玩具”或“高脚椅”的地方。如果用户添加一个过滤器,我有点困惑如何在控制器中创建 if else 条件,两者都或没有。

Places
t.string "name"
t.string "address"
t.float "latitude"
t.float "longitude"
t.bigint "user_id"
t.boolean "toy", default: false
t.boolean "high_chair", default: false

// Controller
def index
 @places = policy_scope(Place)
 @text_search = params[:search]

 if @text_search.present?
  @places = Place.global_search(params[:search]).where(type: @types).where(toy: 
  params[:toy].where(high_chair: params[high_chair])
 else
  @places = Place.all
  @result = "No Result"
 end
end

// View
<%= form_tag(places_path, method: :get, class: "search-form") do %>
 <div class="search-input">
  <%= text_field_tag :search, params[:search],
                     class: "search-input form-control",
                     placeholder: "Type your city...'"%>
  <%#= check_box_tag(:toy) %>
  <%#= label_tag(:toy, "Toys") %>
  <%#= check_box_tag(:high_chair) %>
  <%#= label_tag(:high_chair, "High Chair") %>
  <%= submit_tag "????", class: "search-submit btn-search"  %>
 </div>
<% end %>

【问题讨论】:

    标签: ruby-on-rails ruby filtering


    【解决方案1】:

    我建议你使用ransack gem,这样会更容易。

    // View
    <%= search_form_for @query, url: places_path, method: :get, class: "search-form" do |f| %>
      <%= f.label :high_chair_true %>
      <%= f.check_box :high_chair_true %>
      <%= f.label :high_chair_false %>
      <%= f.check_box :high_chair_false %>
      <%= f.label :toy_true %>
      <%= f.check_box :toy_true %>
      ...
      <%= f.submit "search" %>
    <% end %>
    
    // Controller
    def index
      @query = Place.ransack(params[:query])
      @places = @query.result
    end
    

    根据您的需要使用组合。

    【讨论】:

    • 您好,费尔南德,感谢您的推荐。不幸的是,ransack 没有给出我想要的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多