我有这样的表关系:
证书归属程序
证书归属用户
我在证书视图页面中有一个表格来获取关键字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语句,并在name
和email
上使用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