【问题标题】:ActiveRecords [something] belongs_to [User] and has_many [Users]ActiveRecord [something] belongs_to [User] 和 has_many [Users]
【发布时间】:2012-02-26 09:32:17
【问题描述】:

我正在使用UsersTools 建模一个场景,其中Tool 由一个User 拥有,但可以由许多Users 使用,包括拥有它的一个。

我正在考虑将owner_id 列添加到Tools 并说has_many 用户或添加新的关系表。

我真的是 Rails 的新手,但在模型中设置正确的关联时遇到问题,也许您可​​以指出正确的方向?

非常感谢。

【问题讨论】:

    标签: ruby-on-rails activerecord associations has-many belongs-to


    【解决方案1】:

    您应该将owner_id 添加到Tools 表中。 协会将是这样的。

    class User < ActiveRecord::Base
      has_and_belongs_to_many :tools
    end
    
    class Tool < ActiveRecord::Base
      has_and_belongs_to_many :users
      belongs_to :owner, :class_name => 'User'
    end
    

    您需要一个 tools_users 表才能使用 habtm-association。生成迁移并创建带有选项id: false 和两列user_idtool_id 的表:

    class CreateToolsUsersTable < ActiveRecordMigration
      def change
        create_table :tools_users, id: false do |t|
          t.integer :tool_id
          t.integer :user_id
        end
      end
    end
    

    之后,您可以拨打 @user.tools@user.owner 之类的电话 阅读更多there

    【讨论】:

    • 感谢您的快速回复。我将如何处理 Tool 由一个 User 拥有但建模,它也可以被许多 Users 使用?目前只能供User使用,还是我看错了?
    • 我不确定,因为我没有对此进行测试,但我相信您可以将所有者定义为@tool.owner = @user,如果您只想将普通用户添加到工具@tool.users &lt;&lt; @user。哦,而不是belongs_to :user 你需要has_many_and_belongs_to_many :users 关联
    • 您需要一个 tools_users 表才能使用 habtm-association。生成迁移并创建一个带有选项 id: false 和两列 user_id 和 tool_id 的表 :)
    • 是的,好点@theodorton。如果您不介意,我会将其添加到答案中。
    【解决方案2】:

    用户有很多工具 工具属于所有者中的用户 工具有很多用户

    是我会做的。 我不确定措辞,因为我不使用 Active Record,但这就是它在其他形式中的工作方式

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      相关资源
      最近更新 更多