recursos rails formularios anidados ruby-on-rails ruby ruby-on-rails-4 associations seeding

ruby-on-rails - anidados - formularios en ruby on rails



¿Cómo crear un nuevo registro para una asociación de varios a muchos que acepte atributos anidados? (1)

Creo que su problema puede ser que no haya especificado una "clave externa" para las relaciones has_many en el Modelo de usuario. Tratar:

has_many :relationships, foreign_key: "organization_id", dependent: :destroy

Esto identifica de forma única una organización por relación con su modelo de usuario.

Organization y el User tienen una asociación muchos a muchos a través de la Relationship . Inicialmente implementé esta asociación de uno a muchos, que funcionó pero ahora necesito que se convierta en una asociación de varios a muchos. Así que creé el modelo de Relationship y cambié la asociación en los archivos modelo.

Organization acepta atributos anidados para el User ya que en mi aplicación tengo un formulario de registro unido para los dos. Además, lo uso en mi archivo de semillas:

Organization.create!(name: "name", ...).users.create(email: "[email protected]", ...)

Esto funcionó cuando era una asociación de uno a muchos, pero ahora es una asociación de varios a muchos, que se produce al sembrar el error:

Validation failed: Member can''t be blank, Moderator can''t be blank

Esto se refiere a las variables para el modelo de Relationship , a través del cual el User y la Organization están asociados.

¿Qué causa este error? ¿Por qué están estos valores en blanco? ¿Es la línea de creación de Organization.create quizás incorrecta para una asociación de muchos a muchos? member y moderator tienen valores predeterminados (ver archivo de migración). Esperaría que creara la organization , el user y la relationship con los valores predeterminados. ¿De qué otra forma debería estar creando una nueva organización y usuario?

El modelo de organización:

has_many :relationships, dependent: :destroy has_many :users, through: :relationships accepts_nested_attributes_for :relationships, :reject_if => :all_blank, :allow_destroy => true validates_associated :users

El modelo de relación:

belongs_to :organization belongs_to :user accepts_nested_attributes_for :user validates_presence_of :organization validates_presence_of :user validates :member, presence: true validates :moderator, presence: true

El modelo de usuario:

has_many :relationships, dependent: :destroy has_many :organizations, through: :relationships, inverse_of: :users

La relación de migración:

class CreateRelationships < ActiveRecord::Migration def change create_table :relationships do |t| t.belongs_to :user, index: true t.belongs_to :organization, index: true t.boolean :member, null: false, default: false t.boolean :moderator, null: false, default: false t.timestamps null: false end add_index :relationships, [:user_id, :organization_id], unique: true end end