Rails: Voltando para modelar o objeto pertence a
-
19-09-2019 - |
Pergunta
Esta é provavelmente uma pergunta idiota, mas eu não consigo encontrar uma resposta boa. Eu quero saber a melhor maneira de remeter para o modelo que um objeto pertence.
Por exemplo:
class User < ActiveRecord::Base
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :users
end
Assim, para obter mensagens do usuário, eu posso usar user.posts, mas para obter o usuário do post, eu não posso fazer o inverso: post.user
Se eu adicionar um método de "usuário" com o modelo Post, ele funciona, mas não parece ser o melhor caminho.
class Post < ActiveRecord::Base
belongs_to :users
def user
User.find(self.user_id)
end
end
Se você olhar para este post http: //www.fortytwo .gr / blog / 18/9 Essential-Rails-Tips como um exemplo, você pode ver que os usos autor post.user.username, que não funciona fora da caixa, bem como: incluir = >. [: user], que também não funciona, mesmo com o método de "usuário" no modelo Post
Eu sei que isto é rudimentar, por isso obrigado por sua paciência. Eu só quero saber a melhor maneira de realizar essa relação.
Meu principal objetivo é escrever "achados" Usando aninhado inclui, que remetem para o usuário assim:
post = Post.find (: all,: incluir => [: user])
Quando eu tentar isso, eu recebo "ActiveRecord :: ConfigurationError: Associação chamado 'usuário' não foi encontrado, talvez você mal escrito que"
Muito obrigado.
Solução
Eu sou um pouco novo para Rails, mas isso deve funcionar automaticamente ...
Ah - você nomeou a classe pai em Post como belongs_to :users
; mas porque ele só pertence a um único usuário, Rails está esperando belongs_to :user
(ou, é claro, belongs_to :users, :class_name => "User"
).
Isto é:
class Post < ActiveRecord::Base
belongs_to :user
end
deve fazer o trabalho.
Outras dicas
pertence a um modelo devem ser no singular. como
belongs_to :user