ruby on rails - validations - Come fare has_many e has_one nello stesso modello?




ruby rails scope (4)

Il team ha molti utenti, voglio che il team abbia un leader

Questo "Leader" sarà un utente

Usa ereditarietà (anche chiamata sottoclasse), Leader è un utente.

class User < ActiveRecord::Base
    belongs_to :team
end

class Leader < User
end

class Team < ActiveRecord::Base
    has_many :users
    has_one :leader
end

Anche la tabella dei tuoi utenti è importante. Assicurati che t.belongs_to :team e t.string :type nel suo metodo create_table. Si noti che un leader è un utente e non ha bisogno di una tabella separata, tuttavia è necessario consentire a ActiveRecord di registrare il suo tipo in modo che possa restituire il modello corretto in un secondo momento.

Riferimenti:

inheritance particolare è necessaria l'ereditarietà di una tabella singola

belongs_to scorrere verso il basso per has_one e has_many, le tre relazioni utilizzate qui.

Devo fare due associazioni nello stesso modello. Dove:

Il team ha has_many utenti , voglio che il team has_one leader

Questo "Leader" sarà un utente

has_one throught cercando di usare has_one throught ma penso che l'associazione non funzioni.

Leader.rb

class Leader < ActiveRecord::Base
belongs_to :user
belongs_to :team

Team.rb

class Team < ActiveRecord::Base
has_one :user, through: :leader
end

User.rb

class User < ActiveRecord::Base

belongs_to :team
has_one :captain

end

e l'errore seguente su linea 27:

NoMethodError in TeamsController#create

26 def create

**27 @team = current_user.teams.create(team_params)**

28 @team.save

29 respond_with(@team)

30 current_user.update(team_id: @team.id)

Che ne dici di impostare un flag boolean nella tabella degli utenti chiamata leader . E poi la tua associazione può diventare:

class Team < ActiveRecord::Base   
  has_many :users   
  has_one :leader, class_name: 'User', -> { where leader: true }
end

In questo caso penso che tu abbia bisogno di 2 modelli sufficienti

1). Modello utente

class User < ActiveRecord::Base
   belongs_to :team
end

2). Modello di squadra

 class Team < ActiveRecord::Base
   has_many :users
   belongs_to :leader, class_name: 'User', foreign_key: :leader_id
 end

current_user.teams.create(team_params)

I team has_many un'associazione has_many , tu vuoi current_user.create_team(team_params)