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.

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top