【问题标题】:Association between User Owner and Guests in railsRails 中用户所有者和来宾之间的关联
【发布时间】:2018-05-20 10:00:22
【问题描述】:

用户是网站的用户。 如果用户将在网站中创建页面,则创建页面的用户将成为该特定页面的所有者。 用户可以向其他用户发送加入他的页面的邀请。 如果用户将加入其他用户的页面,则加入该页面的用户将成为该页面的访客。

所以请任何人帮我设计上述模型的数据库。

【问题讨论】:

    标签: ruby-on-rails model-associations


    【解决方案1】:

    将有三种模型,一种用于用户,另一种用于用户创建的网站页面,第三种将存储访问页面的客人的详细信息。

    以下是用户、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
    

    希望对你有帮助!!

    【讨论】:

      【解决方案2】:

      您将拥有 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 非常灵活且有据可查。我建议你检查:

      【讨论】:

        猜你喜欢
        • 2016-08-30
        • 2014-08-09
        • 1970-01-01
        • 1970-01-01
        • 2015-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-19
        相关资源
        最近更新 更多