【问题标题】:Audited: Associated audits with HABTM relation已审核:与 HABTM 关系相关的审核
【发布时间】:2018-11-28 08:56:58
【问题描述】:

我有模型userrole

class User < ApplicationRecord
  rolify strict: true

  has_many :roles, through: :users_roles
  has_associated_audits


class Role < ApplicationRecord
  has_and_belongs_to_many :users, join_table: :users_roles
  audited associated_with: :users, join_table: :users_roles

当我创建一个新角色时,我遇到了错误:

2.4.4 :373 >   User.first.add_role Role.pi, ProjectRequest.find(319)
  User Load (0.7ms)  SELECT  `users`.* FROM `users` ORDER BY `users`.`id` ASC LIMIT 1
  ProjectRequest Load (0.6ms)  SELECT  `project_requests`.* FROM `project_requests` WHERE `project_requests`.`id` = 319 LIMIT 1
  Role Load (0.6ms)  SELECT  `roles`.* FROM `roles` WHERE `roles`.`name` = 'pi' AND `roles`.`resource_type` = 'ProjectRequest' AND `roles`.`resource_id` = 319 ORDER BY `roles`.`id` ASC LIMIT 1
   (0.2ms)  BEGIN
  SQL (0.6ms)  INSERT INTO `roles` (`name`, `resource_type`, `resource_id`, `created_at`, `updated_at`) VALUES ('pi', 'ProjectRequest', 319, '2018-06-19 11:40:13', '2018-06-19 11:40:13')
   (54.3ms)  ROLLBACK
NoMethodError: undefined method `primary_key' for User::ActiveRecord_Associations_CollectknowProxy:Class

我现在真的不知道问题出在哪里,是我错误地指定了什么吗?

【问题讨论】:

    标签: ruby-on-rails ruby rolify acts-as-audited


    【解决方案1】:

    如果它是 has_and_belongs_to_many :users 和 join_table 是 users_roles 在角色表中的这种情况下,则看起来存在关联问题,它也应该是 has_and_belongs_to_many :roles、join_table: :users_roles,这将建立 HABM 关系。

    【讨论】:

    • 问题还是和下面的定义一样。 userhas_and_belongs_to_many :roles, join_table: :users_roles rolehas_and_belongs_to_many :users, join_table: :users_roles
    • 我希望 RoleUser 模型中具有 belongs_to :role 和 belongs_to :user。
    • 对于has_and_belongs_to_many HABTM,RoleUser 模型不存在。但是当我创建它时,它可以工作。我通过 blog.flatironschool.com/… 删除了 HABTM 来修复它
    【解决方案2】:

    我已经通过本教程解决了这个问题: http://blog.flatironschool.com/why-you-dont-need-has-and-belongs-to-many/

    我所做的是删除了 HABTM 关系并为连接表创建了模型。

    class User < ApplicationRecord
      rolify strict: true
      has_many :users_roles
      has_many :roles, through: :users_roles, dependent: :destroy
      has_associated_audits
    
    
    class Role < ApplicationRecord
      has_many :users_roles
      has_many :users, through: :users_roles, dependent: :destroy
      audited associated_with: :users
    
    class UsersRole < ApplicationRecord
      # audited associated_with: :role
      audited associated_with: :user
    
      belongs_to :user
      belongs_to :role
    end
    

    现在,在 UsersRole 实例上创建带有更改的审计时。 问题是,更改只包含被破坏的列的ids,所以你无法弄清楚它是什么。 这个问题在这里得到了部分解决:https://github.com/collectiveidea/audited/issues/72#issuecomment-398756380

    【讨论】:

      猜你喜欢
      • 2016-03-08
      • 2023-02-03
      • 2016-05-30
      • 2012-07-08
      • 1970-01-01
      • 2018-05-11
      • 1970-01-01
      • 2013-09-01
      • 2013-03-03
      相关资源
      最近更新 更多