代码之家  ›  专栏  ›  技术社区  ›  Harish Shetty

在a上使用“find”或“create”by时出错,有多个“through”关联

  •  5
  • Harish Shetty  · 技术社区  · 14 年前

    我在使用时遇到问题 find_or_create_by has_many through 协会。

    class Permission < ActiveRecord::Base
      belongs_to :user
      belongs_to :role
    end
    
    class Role < ActiveRecord::Base
      # DB columns: user_id, role_id
    
      has_many :permissions
      has_many :users, :through => :permissions
    end
    
    class User
      has_many :permissions
      has_many :roles, :through => :permissions
    end
    

    当我调用时,Rails抛出一个错误 查找或创建 roles User 对象。

    u = User.first
    u.roles.find_or_create_by_rolename("admin")
    
    # Rails throws the following error
    # NoMethodError: undefined method `user_id=' for #<Role id: nil, rolename: nil, 
    #  created_at: nil, updated_at: nil>
    

    我可以通过如下更改代码来解决此问题:

    unless u.roles.exists?(:rolename => "admin")
      u.roles << Role.find_or_create_by_rolename("admin") 
    end
    

    我很想知道 查找或创建 与合作 有很多 协会。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Marcel Jackwerth    14 年前

    它是有效的,但不适用于 :through .