我有3个模型:黑客,投票,用户。
用户可以创建许多黑客攻击。 每个用户应该能够对每个黑客ONCE进行投票(等级为1-5。如果出现错误点击等等,评级应该是可更新的。)
我想到了以下关系: Hack.rb
belongs_to :user
User.rb
has_many :hacks
Votes.rb
belongs_to :user
belongs_to :hack
这是正确的还是我错过了什么? 我想在以后获得这样的所有投票:
Hack.first.votes
我需要设置什么样的外键? 在我的schema.rb中,我已经成功设置了我的用户< => hack关系,没有任何外键。
ActiveRecord::Schema.define(version: 20141019161631) do
create_table "hacks", force: true do |t|
t.string "url"
t.string "name"
t.text "description"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "users", force: true do |t|
t.string "email", null: false
t.string "crypted_password", null: false
t.string "salt", null: false
t.datetime "created_at"
t.datetime "updated_at"
t.integer "role"
end
end
非常感谢你!
答案 0 :(得分:0)
我认为这就是你想要的。
class User.rb
has_many :votes
has_many :hacks, through: :votes
end
class Vote.rb
belongs_to :user
belongs_to :hack
end
class Hack.rb
has_many :votes
end
有了这个,黑客通过用户获得了很多投票。
外键: 投票表:user_id,hack_id
你应该可以做hack.votes
编辑:
我编辑模型以反映正常有很多关系
用户 - >投票< - hack
用户有很多选票 用户通过投票有很多黑客攻击 黑客有很多选票
外键存在于投票表中。您可以在创建投票表时使用以下内容来指示外键
t.references user
t.references hack