【发布时间】:2018-01-25 00:34:39
【问题描述】:
期望的结果:
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
问题: 这个 has_many through: 关联在哪里出错了?这是正确的问题吗?
【问题讨论】:
-
您是否尝试使用
reload!重新加载控制台 -
是的,我做了很多次,也退出并返回。检查了我出错的多个教程,但一切似乎都很好。
标签: ruby-on-rails has-many-through