在rails中编写一个作用域,以按类别获取simaliar对象



我需要帮助编写一个范围来获取类似的业务。

我的商业模式有很多类别。所以我想要一个范围来查询除了当前记录之外的所有类别相似的业务。

business.rb

class Business < ApplicationRecord
........
has_many :business_categories
has_many :categories , through: :business_categories
scope :similar_businesses, -> (current_business_id, category_name) {joins(:categories).where(categories:{name: category_name}).where.not(id: current_business_id, name: category_name)}
........

类别.rb

class Category < ApplicationRecord
has_many :business_categories
has_many :businesses,, through: :business_categories
validates :name ,presence: true

business_controller.rb

def show
.....
@business = Business.friendly.find(params[:id])
@similar_businesses = Business.similar_businesses(@business.id, @business.categories.pluck(:name))
.....

business/show.html.erb

<%@similar_businesses.each do |business|%>
<%=business.business_name%> <br>
<%end%>

有了这个起床。我有PG错误

PG::UndefinedFunction: ERROR:  operator does not exist: character varying = bigint
LINE 1: ...tegories"."category_id" WHERE "categories"."name" IN (SELECT...

我假设您的Category模型有一个category_name(或类似的东西(属性,类似的类别意味着具有相同category_name的类别。这就是你如何获得类似类别的所有业务:

scope :businesses_by_category, ->(category_name) { joins(:categories).where(categories: { name: category_name }) }

最新更新