【问题标题】:Rails how to access users status on project levelRails 如何在项目级别访问用户状态
【发布时间】:2020-02-03 13:53:46
【问题描述】:

我有两个模型 User 和 Project 在 has_and_belongs_to_many 关联 用户模型具有列状态 我可以访问项目中的用户的状态,例如

project.user.status

但是用户可以在不同的项目中,我希望他的状态是在项目级别而不是在他的 id 上

【问题讨论】:

  • 您的意思是,您想将状态属性作为数据库迁移移动到 Project 中吗?
  • @SebastianPalma 我想要的是一个状态列,它应该基于项目,即 project1.user1.status => true,project2.user2.status => false 这样
  • 你能添加你的模型和模式来尝试复制你的场景吗?

标签: ruby-on-rails model-view-controller ruby-on-rails-5 associations


【解决方案1】:

如果我正确理解您的问题,问题是您需要将用户的状态与用户可能关联的多个项目之一相关联,但您将单个状态与单个用户相关联,而不是项目。

在这种情况下,您需要将此关联抽象为一个附加模型,例如将与用户和项目相关联的“UserProjectStatus”。您可以通过关联使用 has_many 来执行此操作。这最终会产生以下内容:

class Project < ApplicationRecord
  has_many :user_project_statuses
  has_many :users, through :user_project_statuses
end

class UserProjectStatus < ApplicationRecord
  belongs_to :user
  belongs_to :project
end

class User < ApplicationRecord
  has_many :user_project_statuses
  has_many :projects, through :user_project_statuses
end

https://guides.rubyonrails.org/association_basics.html#the-has-one-through-association 可以很好地概述任何其他 Rails ActiveModel 关联。

希望这会有所帮助!

【讨论】:

  • 已编辑格式化。 rails 中的复合关联名称也是snake_case 而不是nospace。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-10
  • 2018-06-12
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
  • 1970-01-01
  • 2012-06-23
相关资源
最近更新 更多