/ / Rails: has_many: through - ruby-on-rails, has-many-through

Rotaie: has_many: through - ruby-on-rails, has-many-through

Sto cercando di capire se il mio approccio ècorretta. Ho un modello utente e un modello di compensazione. Devo consentire all'amministratore dell'applicazione di assegnare un compenso a ciascun record dell'utente. Questa compensazione può cambiare nel tempo e voglio tenere traccia delle modifiche. Dopo alcune ricerche, ho pensato che il has_many =>: through era il modo di affrontarlo usando un terzo modello chiamato Payments per unire gli altri due e all'interno di quel modello c'erano user_id e compensazione_id. Ho il seguente set:

class User < ActiveRecord::Base

has_many :payments
has_many :compensations, :through => :payments


class Compensation < ActiveRecord::Base

has_many :payments
has_many :users, :through => :payments

class Payment < ActiveRecord::Base

has_many :Users
has_many :compensations

La mia prima domanda è: Ho ragione, che questo sarebbe l'approccio migliore sapendo cosa sto cercando di ottenere? La mia seconda domanda è qual è il modo più semplice per includere un modulo a discesa nel modulo (raggruppamento dalla tabella di compensazione) che popolerebbe la tabella di pagamento? Sfortunatamente, la maggior parte delle discussioni sul web che ho recensito has_many: through centrato sui modelli e non sulla vista.

Qualsiasi assistenza sarebbe apprezzata.

risposte:

1 per risposta № 1
class User < ActiveRecord::Base
has_many :payments
has_many :compensations, :through => :payments
end

class Compensation < ActiveRecord::Base
has_many :payments
has_many :users, :through => :payments
end

class Payment < ActiveRecord::Base
belongs_to :user
belongs_to :compensation
end

Prova questo potrebbe essere utile per te. Ulteriori informazioni. guarda questo video - has_many-> attraverso


0 per risposta № 2

Non è davvero chiaro quale sia il tuo obiettivo. Perché un utente dovrebbe avere molti compensi? Perché un risarcimento dovrebbe avere molti utenti, e non dovrebbe esserci un risarcimento particolare per un determinato utente che viene risarcito? Non sono nemmeno sicuro di quale forma stai parlando nella tua seconda domanda.

Detto questo, supponendo che tu voglia qualcosa che fa qualcosa di simile al tuo codice sopra, avresti solo bisogno di:

class User < ActiveRecord::Base
has_and_belongs_to_many :compensations
end

class Compensation < ActiveRecord::Base
has_and_belongs_to_many :users
end

Per quanto riguarda il menu a discesa, guarda Rails select aiutanti. Mi dispiace, non posso essere più specifico, di nuovo, non sono esattamente sicuro di cosa stai cercando di fare.


0 per risposta № 3

L'ho capito - ma sono andato in un'altra direzione - per ora ho deciso di non essere in grado di tracciare la storia e ho creato un menu a discesa di dynamci usando collection_select -


0 per risposta № 4

La tua prima domanda è: Ho ragione, che questo sarebbe l'approccio migliore sapendo cosa sto cercando di ottenere? Risposta: Questo è un buon approccio, ma è possibile "associazioni polimorfiche" lì per soluzioni più specifiche. La tua seconda domanda è qual è il modo più semplice per includere un campo a discesa nel modulo (raggruppamento dalla tabella di compensazione) che popolerebbe la tabella di pagamento?

La seconda domanda non è molto chiara. Vuoi visualizzare il valore di alcuni attributi?

In tal caso, segui questo mio esempio. Penso che ti aiuterà.

contact.select: contactable, @ member.contacts.map {| r | [r.first_name, r.id]}