使用外键查询活动记录
Active record query with foreign key
我有一个类别模型:
class Category < ApplicationRecord
has_many :products
end
使用此数据库架构:
create_table "categories", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
和产品型号:
class Product < ApplicationRecord
belongs_to :category
end
使用此数据库架构:
create_table "products", force: :cascade do |t|
t.string "origin"
t.string "name"
t.text "description"
t.bigint "category_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["category_id"], name: "index_products_on_category_id"
end
在我的种子中,我只有 2 个类别('coffee' 和 'equipment'),一些产品的种子类别是:咖啡。
我正在尝试在我的家庭控制器中进行简单的活动记录查询,以仅 select 具有咖啡类别名称的产品。
我试过了:
@coffees = Product.joins(:category).where("name = 'coffee'")
和
@coffees = Product.joins(:category).where("category.name = 'coffee'")
和
@coffees = Product.where("product.category.name == 'coffee' ")
但是其中 none 个在工作,我无法在主视图中显示数组。有什么想法吗?
您使用了错误的 table 名称。没有名为 'category'.
的 table
我觉得应该是这样的:
@coffees = Product.joins(:category).where("categories.name = 'coffee'")
我有一个类别模型:
class Category < ApplicationRecord
has_many :products
end
使用此数据库架构:
create_table "categories", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
和产品型号:
class Product < ApplicationRecord
belongs_to :category
end
使用此数据库架构:
create_table "products", force: :cascade do |t|
t.string "origin"
t.string "name"
t.text "description"
t.bigint "category_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["category_id"], name: "index_products_on_category_id"
end
在我的种子中,我只有 2 个类别('coffee' 和 'equipment'),一些产品的种子类别是:咖啡。 我正在尝试在我的家庭控制器中进行简单的活动记录查询,以仅 select 具有咖啡类别名称的产品。 我试过了:
@coffees = Product.joins(:category).where("name = 'coffee'")
和
@coffees = Product.joins(:category).where("category.name = 'coffee'")
和
@coffees = Product.where("product.category.name == 'coffee' ")
但是其中 none 个在工作,我无法在主视图中显示数组。有什么想法吗?
您使用了错误的 table 名称。没有名为 'category'.
的 table我觉得应该是这样的:
@coffees = Product.joins(:category).where("categories.name = 'coffee'")