ActiveRecord - 用户has_many事件并且作为成员属于这些事件

时间:2016-12-05 23:04:22

标签: ruby-on-rails activerecord

我想建立一种关系,用户可以在其中启动事件,然后将其作为成员加入。我认为这使用了多对多关系,但它也有一个简单的belongs_to关系,从事件到用户。

class User < ActiveRecord::Base
  has_secure_password
  has_many :events # => Owning
  has_many :events, through: :members  # => Joining
end

class Event < ActiveRecord::Base
  belongs_to :user # => event owner
  has_many :users, through: :members # => joining users
end

class Member < ActiveRecord::Base
  belongs_to :user
  belongs_to :event
end

但是我无法让Event.first.members这样的查询工作......我无法弄清楚是什么阻止我使用这些方法。我是否以错误的方式思考这些关系?我的Schema.rb:

ActiveRecord::Schema.define(version: 20161205220807) do

  create_table "events", force: :cascade do |t|
    t.string   "title"
    t.string   "location"
    t.integer  "user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  add_index "events", ["user_id"], name: "index_events_on_user_id"

  create_table "members", force: :cascade do |t|
    t.integer  "user_id"
    t.integer  "event_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  add_index "members", ["event_id"], name: "index_members_on_event_id"
  add_index "members", ["user_id"], name: "index_members_on_user_id"

  create_table "users", force: :cascade do |t|
    t.string   "name"
    t.string   "email"
    t.integer  "age"
    t.string   "password_digest"
    t.datetime "created_at",      null: false
    t.datetime "updated_at",      null: false
  end

end

1 个答案:

答案 0 :(得分:1)

已更新以修正我的错误

  class User < ActiveRecord::Base
      has_secure_password
      has_many :members
      has_many :events, through: :members
    end

    class Event < ActiveRecord::Base
      #belongs_to :user # => event owner
      has_many :members
      has_many :users, through: :members

    class Member < ActiveRecord::Base
      belongs_to :user
      belongs_to :event
    end

如果这给你一个堆栈级别太深的错误我猜测问题在别处。您的日志可能包含更多信息。