5
Estoy corriendo hacia un problema al usar find_or_create_by
en una asociación has_many
through
.Error al usar `find_or_create_by` en una asociación` 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 lanza un error cuando invoco find_or_create_by
en roles
asociación de un objeto 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>
que fue capaz de evitar el problema cambiando el código como sigue:
unless u.roles.exists?(:rolename => "admin")
u.roles << Role.find_or_create_by_rolename("admin")
end
tengo curiosidad de encontrar si find_or_create_by
obras con has_many
through
asociaciones.
Sí, el problema se limita a: a través de. Actualizaré la pregunta para reflejar eso. –
No creo que obtengas más respuestas en este caso. Se supone que los métodos 'find_or _...' no funcionan con las asociaciones ': through'. La única forma en que podría hacerlo funcionar sería eliminar el modelo 'Permiso' y usar una relación' has_and_belongs_to_many' con una tabla de asignación simple. –
Llamadas como 'u.roles.find_by_rolename (" admin ")' funciona con 'has_many: through'. Así que pensé que 'u.roles.find_or_create_by_rolename (" admin ")' podría funcionar. ¿Puede indicarme la documentación donde se especifica esta advertencia? –