st = 'pen'
ak = '123123'
agreements = Client.where{authentication_key == ak}.first.agreements
products = Product.joins{agreements}.where{agreements.id.in(a) & (short_description.like(st) | long_description.like( st))}
我正在尝试使用上述内容但我在结果集中也需要匹配的协议..
因为这个
class Product < ActiveRecord::Base
has_and_belongs_to_many :agreements, uniq: true
我无法使用products.first.agreement.first ....这可能是一个不同的协议。
答案 0 :(得分:0)
我不确定这是否正是你所需要的,但希望它会是:
client = Client.where { authentication_key == ak }.first
products = Client.agreements.joins { products }.where { (short_description.like(st) | long_description.like(st) }
这将返回与协议相关联的产品,而这些协议又与您的客户相关联。如果您需要获得一个客户的产品协议,您可以编写范围:
class Product < ActiveRecord::Base
#...
def self.agreements_for_client(id)
joins { agreements }.where { client_id.eq(id) }
end
end
并致电:
client = Client.where { authentication_key == ak }.first
Product.first.agreements_for_client(client.id)
我希望这会有所帮助。