Rotaie: Facendo nuovamente riferimento al modello appartiene l'oggetto
-
19-09-2019 - |
Domanda
Questa è probabilmente una domanda stupida, ma io non riesco a trovare una buona risposta. Voglio sapere il modo migliore per fare riferimento al modello che un oggetto appartiene.
Ad esempio:
class User < ActiveRecord::Base
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :users
end
Quindi, per ottenere i messaggi degli utenti, posso usare user.posts, ma per ottenere l'utente del post, non posso fare il contrario: post.user
Se posso aggiungere un metodo di "utente" al modello Post, funziona, ma non sembra essere il modo migliore.
class Post < ActiveRecord::Base
belongs_to :users
def user
User.find(self.user_id)
end
end
Se si guarda a questo post del blog http: //www.fortytwo .gr / blog / 18/9 Essential-Rails-Tips come un esempio, si può vedere che l'autore usa post.user.username, che non funziona, fuori dalla scatola, così come: include = > [: utente], che inoltre non funziona, anche con il metodo "utente" nel modello post
.So che questo è rudimentale, così, grazie per la vostra pazienza. Voglio solo conoscere il modo migliore per ottenere questo rapporto.
Il mio obiettivo principale è quello di scrivere "reperti" utilizzando nidificato include, che si riferiscono indietro per l'utente in questo modo:
post = Post.find (: all,: include => [: user])
Quando provo questo, ottengo "ActiveRecord :: ConfigurationError: Associazione denominata 'utente' non è stata trovata, forse scritto male vero?"
Grazie mille.
Soluzione
Sono un po 'nuova per Rails, ma questo dovrebbe funzionare automaticamente ...
Ah - hai nominato la classe padre in Post come belongs_to :users
; ma perché appartiene ad un unico utente, rotaie si aspetta belongs_to :user
(o, naturalmente, belongs_to :users, :class_name => "User"
).
Cioè:
class Post < ActiveRecord::Base
belongs_to :user
end
dovrebbe fare il lavoro.
Altri suggerimenti
Appartiene ad un modello dovrebbe essere in singolare. come
belongs_to :user