Ruby on rails如何按关键字搜索表



我有这样的表关系:

证书归属程序

证书归属用户

我在证书视图页面中有一个表格来获取关键字params。

我想通过表格搜索用户名和电子邮件。

如何在控制器中完成此操作?

<%= form_tag admin_program_path(@program), :method => :get do %>
<%= text_field_tag :keyword, params[:keyword], :placeholder => "Search by name or email", :class => "form-control rounded" %>
<%= submit_tag "Search", :class => "btn btn-outline-secondary" %>
<% end %>

我试了下面的方法,但不起作用。请帮帮我。

@certificates = @program.certificates.includes(:user).order("id DESC")
if params[:keyword].present?
keyword = "%#{params[:keyword].strip}%"
@certificates = @certificates.user.where('name LIKE ? OR email LIKE ?', keyword, keyword)
end

1:通过关键字查找所有用户

2:按已找到的证书查找用户的ID

users = User.where('name LIKE ? OR email LIKE ?', keyword, keyword)

@certificates = @certificates.where(user_id: users.pluck(:id))

OR加入用户表并使用类似@certificates.where('name LIKE ?', keyword)的东西

您没有正确查询users表。您需要将users表与certificates表连接起来,并修改where语句,并在nameemail上使用users.,因为这些属性属于users表。这应该有效:

@certificates = @program.certificates.joins(:user).includes(:user).order("id DESC")
if params[:keyword].present?
keyword = "%#{params[:keyword].strip}%"
@certificates = @certificates.where('users.name LIKE ? OR users.email LIKE ?', keyword, keyword)
end

最新更新