rails 中的用户所有者和访客之间的关联
Association between User Owner and Guests in rails
用户是网站的用户。
如果用户将在网站中创建一个页面,那么创建这些页面的用户将成为该特定页面的所有者。
用户可以发送邀请给其他用户加入他的页面。
如果用户将加入其他用户的页面,则加入该页面的用户将成为该页面的访客。
所以请任何人帮助我设计上述模型的数据库。
将有三个模型,一个用于用户,另一个用于用户创建的网站页面,第三个将存储访问页面的客人的详细信息。
以下是用户 website_page 和 website_guest 之间的高级描述。请在数据库中添加申请中需要的规格。
User
has_many :website_pages, dependent: :destroy
has_many :website_guest, through: :website_pages
Website_pages #user_id (will be the owner)
belongs_to :user
has_many: website_guests, dependent: :destroy
Website_Guests #website_id (will reference the website page) , guest_id
belongs_to :website_pages
belongs_to :user, foreign_key: :guest_id
希望对您有所帮助!!
您将拥有 3 个模型:User, Pages, Member
。迁移如下:
迁移
# Generate the model User
be rails g model user email:string
# Generate the model Page
be rails g model page title:string user:references
# Generate the model Member
be rails g model member user:references page:references
人际关系
class User < ApplicationRecord
has_many :pages, dependent: :destroy
has_many :members
has_many :memberships, through: :members, source: :page
end
class Page < ApplicationRecord
belongs_to :owner, class_name: 'User', foreign_key: 'user_id'
has_many :members, dependent: :destroy
has_many :guests, through: :members, source: :user
end
class Member < ApplicationRecord
belongs_to :user
belongs_to :page
end
控制台
您可以尝试进入控制台进行测试:
user1 = User.create email: 'user1@test.com'
user2 = User.create email: 'user2@test.com'
user3 = User.create email: 'user3@test.com'
page1 = user1.pages.create title:'Page 1'
page1.members.create user:user2
page2 = user2.pages.create title:'Page 2'
page2.members.create user:user1
page2.members.create user:user3
page2.owner
#<User id: 2, email: "user2@test.com", created_at: "2018-05-20 11:03:10", updated_at: "2018-05-20 11:03:10">
page2.guests
#<ActiveRecord::Associations::CollectionProxy [#<User id: 1, email: "user1@test.com",..>, #<User id: 3, email: "user3@test.com",..]>
user2.memberships
#<ActiveRecord::Associations::CollectionProxy []>
希望对您有所帮助,它们是可遵循的不同方法,很大程度上取决于您的业务逻辑和领域。 Rails 非常灵活并且有据可查。我建议您查看:
用户是网站的用户。 如果用户将在网站中创建一个页面,那么创建这些页面的用户将成为该特定页面的所有者。 用户可以发送邀请给其他用户加入他的页面。 如果用户将加入其他用户的页面,则加入该页面的用户将成为该页面的访客。
所以请任何人帮助我设计上述模型的数据库。
将有三个模型,一个用于用户,另一个用于用户创建的网站页面,第三个将存储访问页面的客人的详细信息。
以下是用户 website_page 和 website_guest 之间的高级描述。请在数据库中添加申请中需要的规格。
User
has_many :website_pages, dependent: :destroy
has_many :website_guest, through: :website_pages
Website_pages #user_id (will be the owner)
belongs_to :user
has_many: website_guests, dependent: :destroy
Website_Guests #website_id (will reference the website page) , guest_id
belongs_to :website_pages
belongs_to :user, foreign_key: :guest_id
希望对您有所帮助!!
您将拥有 3 个模型:User, Pages, Member
。迁移如下:
迁移
# Generate the model User
be rails g model user email:string
# Generate the model Page
be rails g model page title:string user:references
# Generate the model Member
be rails g model member user:references page:references
人际关系
class User < ApplicationRecord
has_many :pages, dependent: :destroy
has_many :members
has_many :memberships, through: :members, source: :page
end
class Page < ApplicationRecord
belongs_to :owner, class_name: 'User', foreign_key: 'user_id'
has_many :members, dependent: :destroy
has_many :guests, through: :members, source: :user
end
class Member < ApplicationRecord
belongs_to :user
belongs_to :page
end
控制台
您可以尝试进入控制台进行测试:
user1 = User.create email: 'user1@test.com'
user2 = User.create email: 'user2@test.com'
user3 = User.create email: 'user3@test.com'
page1 = user1.pages.create title:'Page 1'
page1.members.create user:user2
page2 = user2.pages.create title:'Page 2'
page2.members.create user:user1
page2.members.create user:user3
page2.owner
#<User id: 2, email: "user2@test.com", created_at: "2018-05-20 11:03:10", updated_at: "2018-05-20 11:03:10">
page2.guests
#<ActiveRecord::Associations::CollectionProxy [#<User id: 1, email: "user1@test.com",..>, #<User id: 3, email: "user3@test.com",..]>
user2.memberships
#<ActiveRecord::Associations::CollectionProxy []>
希望对您有所帮助,它们是可遵循的不同方法,很大程度上取决于您的业务逻辑和领域。 Rails 非常灵活并且有据可查。我建议您查看: