期望的结果:
Item.first.ratings
为我提供了该项目的评分。
所需的表格和列:
item
id,name,created_at,updated_at
ratings
id,name,created_at,updated_at
item_ratings
id,item_id,rating_id,value,created_at,updated_at
评级迁移:
class CreateRatings < ActiveRecord::Migration[5.0]
def change
create_table :ratings do |t|
t.string :name
t.references :user, foreign_key: true
t.timestamps
end
end
end
加入表格迁移:
class CreateJoinTableItemsRatings < ActiveRecord::Migration[5.0]
def change
create_join_table :items, :ratings do |t|
t.index [:item_id, :rating_id]
t.index [:rating_id, :item_id]
t.string :value
end
end
end
项目模型:
class Item < ApplicationRecord
belongs_to :user
has_many :item_ratings
has_many :ratings, through: :item_ratings
end
评级模型:
class Rating < ApplicationRecord
belongs_to :user
has_many :item_ratings
has_many :items, through: :item_ratings
end
item_rating模型:
class ItemRating < ApplicationRecord
belongs_to :item
belongs_to :rating
end
rails console
Item.first.ratings
结果:
Item Load (0.7ms) SELECT "items".* FROM "items" ORDER BY "items"."created_at" DESC LIMIT $1 [["LIMIT", 1]]
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "item_ratings" does not exist
LINE 8: WHERE a.attrelid = '"item_ratings"'::regclass
^
: SELECT a.attname, format_type(a.atttypid, a.atttypmod),
pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,
(SELECT c.collname FROM pg_collation c, pg_type t
WHERE c.oid = a.attcollation AND t.oid = a.atttypid AND a.attcollation <> t.typcollation),
col_description(a.attrelid, a.attnum) AS comment
FROM pg_attribute a LEFT JOIN pg_attrdef d
ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = '"item_ratings"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
问题: 这有什么地方通过:协会出错?这是正确的问题吗?
答案 0 :(得分:3)
表item_ratings
不存在但items_ratings
确实存在,请尝试将所有item_ratings
重命名为items_ratings
。