编辑:我已经删除并重新创建了数据库,正如另一个答案中所建议的那样,没有任何变化。另外,我不能使用像 act_as_taggable 这样的 gem,因为我使用标签的方式与平常不同。
关于堆栈溢出的第一个问题!我在让一个非常简单的关联正常工作时遇到了一些麻烦,我不知道为什么。我花了很多时间查看 SO 和文档,在我看来,我所拥有的应该是可行的。我正在添加一个属于用户和订单的“标签”模型,并且我还向用户和订单模型添加了 has_many :tags。这是我创建的模型的架构:
create_table "tags", force: true do |t|
t.string "name"
t.string "color"
t.integer "order_id"
t.integer "user_id"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "tags", ["order_id"], name: "index_tags_on_order_id", using: :btree
add_index "tags", ["user_id"], name: "index_tags_on_user_id", using: :btree
在 rails 控制台中,我可以创建一个带有用户关联的标签:
this_tag = Tag.new(name:"Urgent", color: "red", user_id: 1)
我可以得到我的标签用户
this_tag.user
但我无法获得我的用户标签
a_user = User.first
a_user.tags
这给了我:
User Load (0.9ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1
=> #<User id: 1, email: "redacted", encrypted_password: "$2a$10$kdEgXW61I3b3Bu9Rbs3W0ex1jxTmIFWVe1jabDY9q9.U...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 5, current_sign_in_at: "2013-10-29 22:12:57", last_sign_in_at: "2013-10-29 21:59:13", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", created_at: "2013-10-23 23:49:00", updated_at: "2013-10-29 22:12:57", name: "Jordan">
2.0.0-p247 :006 > me.tags
PG::UndefinedTable: ERROR: relation "user_tags" does not exist
LINE 5: WHERE a.attrelid = '"user_tags"'::regclass
^
: SELECT a.attname, format_type(a.atttypid, a.atttypmod),
pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
FROM pg_attribute a LEFT JOIN pg_attrdef d
ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = '"user_tags"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "user_tags" does not exist
LINE 5: WHERE a.attrelid = '"user_tags"'::regclass
^
: SELECT a.attname, format_type(a.atttypid, a.atttypmod),
pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
FROM pg_attribute a LEFT JOIN pg_attrdef d
ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = '"user_tags"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
这似乎是一个奇怪的错误,并且提到它的 SO 帖子似乎都没有像我这样的问题。我可以得到我的用户订单
a_user.orders
并且我的订单模型的架构非常相似,唯一的区别是我没有将索引添加到我的订单模型中......
索引是否弄乱了我的订单?是什么导致了这个讨厌的错误?
附加信息:
我一直无法按照自己的意愿定义这个模型,所以我创建了大约三个迁移,然后将它们回滚,并使用 git reset --hard HEAD 将其他所有内容回滚并每次重新开始。
根据要求,我的用户模型是:
class User < ActiveRecord::Base
has_many :orders
has_many :tags
rolify
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
end
我的标签模型是
class Tag < ActiveRecord::Base
belongs_to :user
belongs_to :order
end