Ruby on rails 简单Rails模型-向用户订阅线程 classtodo“用户” 有很多:注释,:依赖=>:销毁 拥有多个:订阅者,:class\u name=>“用户” 终止 类用户'Todo',:外键=>:Assignment\u id,:dependent=>:destroy 有很多:评论,:通过=>:待办事项 拥有多个:订阅,:至=>:TODO,:反向=>:subscribers 终止

Ruby on rails 简单Rails模型-向用户订阅线程 classtodo“用户” 有很多:注释,:依赖=>:销毁 拥有多个:订阅者,:class\u name=>“用户” 终止 类用户'Todo',:外键=>:Assignment\u id,:dependent=>:destroy 有很多:评论,:通过=>:待办事项 拥有多个:订阅,:至=>:TODO,:反向=>:subscribers 终止,ruby-on-rails,Ruby On Rails,我正试图让用户订阅todos 我希望我能做@todo.subscribers并得到一份用户列表 问题: 我的班级关系正确吗? 如果有订阅服务器,我需要什么数据库结构? 如果有更好的方法,请让我知道 这是一段代码,可以满足您的需要,我简化了您的模型,但它应该可以回答您的问题 该示例可以在不使用rails的情况下自行运行,如果要与rails一起使用,只需忽略文件头即可 class Todo < ActiveRecord::Base belongs_to :user belongs_

我正试图让用户订阅todos

我希望我能做@todo.subscribers并得到一份用户列表

问题:

  • 我的班级关系正确吗?
  • 如果有订阅服务器,我需要什么数据库结构?
  • 如果有更好的方法,请让我知道

    • 这是一段代码,可以满足您的需要,我简化了您的模型,但它应该可以回答您的问题

      该示例可以在不使用rails的情况下自行运行,如果要与rails一起使用,只需忽略文件头即可

      class Todo < ActiveRecord::Base
        belongs_to  :user
        belongs_to :assignee, :class_name => "User"
        has_many :comments, :dependent => :destroy
        has_many :subscribers, :class_name => "User"
      end
      
      class User < ActiveRecord::Base
        has_many :todos
        has_many :assigned_todos, :class_name => 'Todo', :foreign_key => :assignee_id, :dependent => :destroy
        has_many :comments, :through => :todos
        has_many :subscriptions, :through => :todos, :inverse_of => :subscribers
      end
      

      这是一个你想要的代码,我简化了你的模型,但它应该能回答你的问题

      该示例可以在不使用rails的情况下自行运行,如果要与rails一起使用,只需忽略文件头即可

      class Todo < ActiveRecord::Base
        belongs_to  :user
        belongs_to :assignee, :class_name => "User"
        has_many :comments, :dependent => :destroy
        has_many :subscribers, :class_name => "User"
      end
      
      class User < ActiveRecord::Base
        has_many :todos
        has_many :assigned_todos, :class_name => 'Todo', :foreign_key => :assignee_id, :dependent => :destroy
        has_many :comments, :through => :todos
        has_many :subscriptions, :through => :todos, :inverse_of => :subscribers
      end
      

      您是否尝试通过控制台运行此命令,以查看其行为是否符合您的要求?是的,我没有为订阅服务器添加表,因为我不确定模式应该是什么。他们订阅的是什么?待办事项?你应该把它当作一个叫做ToDouser的模型来对待;所以我需要创建另一个包含用户和TODO的表?该调用什么表,我可以删除主键吗?@cjm2671您找到过解决方案吗?您是否尝试过通过控制台运行该表以查看其行为是否符合您的要求?是的,我没有为订阅服务器添加表,因为我不确定模式应该是什么。他们订阅了什么?待办事项?你应该把它当作一个叫做ToDouser的模型来对待;所以我需要创建另一个包含用户和TODO的表?这个表应该被称为什么,我可以删除主键吗?@cjm2671你找到解决这个问题的方法了吗?
      # Dump of table subscriptions
      # ------------------------------------------------------------
      
      CREATE TABLE `subscriptions` (
        `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
        `user_id` int(11) DEFAULT NULL,
        `todo_id` int(11) DEFAULT NULL,
        PRIMARY KEY (`id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
      
      
      
      # Dump of table todos
      # ------------------------------------------------------------
      
      CREATE TABLE `todos` (
        `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
        `text` varchar(255) DEFAULT NULL,
        PRIMARY KEY (`id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
      
      
      
      # Dump of table users
      # ------------------------------------------------------------
      
      CREATE TABLE `users` (
        `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
        `name` varchar(255) DEFAULT NULL,
        PRIMARY KEY (`id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;