You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rails搜索功能中添加单选按钮实现搜索结果范围筛选

Rails带单选筛选的搜索功能实现方案

1. 修复视图代码

首先修正原有视图的拼写错误、参数配置问题,单选按钮参数会随表单自动提交到后端,不需要额外处理传递逻辑:

<div class="form">
    <%= form_with url: search_path, method: 'get' do |form| %>
        <div class="search">
            <%= form.text_field :search, value: params[:search] %>
            <%= form.submit "Search" %>
        </div>
        <div class="radio">
            <%= form.label :search_check_box, "全部" %>
            <%= form.radio_button :search_check_box, :all, checked: params[:search_check_box].nil? || params[:search_check_box] == 'all' %>

            <%= form.label :search_check_box, "公开" %>
            <%= form.radio_button :search_check_box, :public, checked: params[:search_check_box] == 'public' %>

            <%= form.label :search_check_box, "未公开" %>
            <%= form.radio_button :search_check_box, :not_public, checked: params[:search_check_box] == 'not_public' %>
        </div>
    <% end %>
</div>
  • 修复点:删除label多余的value配置、修正not_publick拼写错误、增加选中状态回显,提交表单后选中的单选值会自动存入params[:search_check_box]传递到控制器。

2. 修改控制器代码

新增单选参数的传递,把筛选范围传递给模型搜索方法:

def search
  @movies = Movie.search(params[:search], params[:search_check_box])
end

3. 修改模型搜索方法

组合关键词和范围条件完成筛选:

class Movie < ApplicationRecord
  def self.search(keyword, scope)
    # 先处理范围筛选
    result = case scope
             when 'public' then where(public: true)
             when 'not_public' then where(public: false)
             else all
             end
    # 再处理关键词搜索
    if keyword.present?
      result = result.where('name LIKE ?', "%#{keyword}%")
    end
    result
  end
end
  • 注意:以上代码假设你的Movie模型存在public布尔类型字段用来标识公开状态,如果字段名不同请自行替换。

内容的提问来源于stack exchange,提问作者Beginner Professional

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:45:01