ruby-on-rails - 搜索嵌套资源
问题描述
我想知道是否可以搜索对象 ID。
理想情况下,我希望搜索重定向到对象编辑页面,但这是有问题的。我现在只是在索引页面上搜索以尝试仅显示搜索到的对象。
就目前而言,索引页面打开时会显示完整的集合对象,当在搜索栏中输入 ID 时会清除索引,但不会显示适当的对象。
这是我的控制器:
def index
@guests = @event.guests
if params[:search]
@search_term = params[:search]
@guests = @event.guests.search_by(@search_term)
end
end
这是我的客人模型:
class Guest < ApplicationRecord
belongs_to :event
def self.search_by(search_term)
where("(id) = :search_term", search_term: "%#{search_term}%")
end
end
这是我的索引页:
<h3>Enter your ID here:</h3>
<%= form_for "", url: event_guests_path, role: 'search', method: :get do %>
<%= text_field_tag :search, @search_term, placeholder: "Enter ID here:" %>
<% end %>
<% @guests.each do |guest| %>
<tr>
<td> <%=guest.name %></td>
<td> <%=guest.response %></td>
<td><%= link_to 'Show', event_guest_path(@event, guest) %></td>
<td><%= link_to 'RSVP', edit_event_guest_path(@event, guest) %></td>
<td><%= link_to 'Remove Guest', [@event,guest], method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
如果需要更多代码,我将相应更新
提前致谢
解决方案
You could have the controller, if you've done a search with a single result, redirect:
def index
@guests = @event.guests
if params[:search]
@search_term = params[:search]
@guests = @event.guests.search_by(@search_term)
end
if params[:search] && @guests.count == 1
redirect_to edit_guests_path(@guest.first)
end
end
Additionally, in your search_by
function, you are currently generating sql that will look something like WHERE (id) = '%1234%'
, where you are using =
to test not LIKE
, or are adding %s to the string which are not needed. Either way, that explains getting no results. You probably want to change it to where("(id) LIKE :search_term", search_term: "%#{search_term}%")
or where("(id) = :search_term", search_term: search_term)
. The later can be written in a more Rails-ish way: where(id: search_term)
.
推荐阅读
- jqgrid - 如何冻结 JqGrid 中的动态列?
- jquery - 如何在不刷新的情况下使用 Ajax 在 ASP.NET MVC 中保存表单数据
- javascript - 如何在angularjs中为选择设置默认值
- regex - 删除只有数字的行 - 正则表达式
- php - 为什么 ActiveMQ 通过 Stomp 向我的 PHP 消费者传递重复的消息?
- sql - PostgreSQL:基于数组(外键)列连接 2 个表
- angular6 - 使用 IE 9 的 useHash true 在 Angular 6 中获取查询参数
- phpunit - 如何使用包 phpunit 为 sublime text 3 创建 phpunit.xml 文件
- php - Slim 3 重定向路由循环不起作用
- powershell - 最佳实践 - 如果匹配返回结果