我有用户模型和产品型号。用户有一个产品,产品有一个用户。为了创建用户和产品模型,我有一个单独的表单,使用嵌套属性创建它们。
我正在尝试根据用户的姓名,电子邮件地址或产品序列号创建可以查找用户的搜索。我在查找用户的姓名或电子邮件地址时有此工作,但我不知道如何以相同的形式按序列号查找用户的产品。
所以我试图搜索User.last_name,User.email和User.product.serial - 无法弄清楚如何解决这个问题。
这是我的用户模型
class User < ActiveRecord::Base
has_many :products, dependent: :destroy
accepts_nested_attributes_for :products, :allow_destroy => true
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(?:\.[a-z\d\-]+)*\.[a-z]+\z/i
validates :last_name, presence: true
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }
def self.search(query)
where("last_name = ? OR email = ?", query, query)
end
end
我的产品型号
class Product < ActiveRecord::Base
belongs_to :user
default_scope -> { order('created_at DESC') }
validates :serial, presence: true
end
包含搜索字段的我的用户视图
<%= form_tag(users_path, method: "get", :id => "user_search_form") do %>
<%= text_field_tag :search, params[:search], placeholder: "Search users" %>
<%= submit_tag("Search", :name => nil ) %>
<% end %>
我的用户控制器的相关部分
def index
if params[:search]
@users = User.search(params[:search]).order("created_at DESC").paginate(page: params[:page], :per_page => 30)
else
@users = User.paginate(page: params[:page], :per_page => 30)
@product = @users.product
end
end
答案 0 :(得分:0)
你可以这样做:
def self.search(query)
joins(:products)
.where("last_name = :query OR email = :query OR products.serial = :query",
query: query)
end