如何正确设置我的模型关系

时间:2014-10-19 16:36:03

标签: ruby-on-rails relation

我有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

非常感谢你!

1 个答案:

答案 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