Рельсы:Возвращаясь к модели, к которой принадлежит объект
-
19-09-2019 - |
Вопрос
Возможно, это глупый вопрос, но, похоже, я не могу найти хорошего ответа.Я хочу знать, как наилучшим образом вернуться к модели, к которой принадлежит объект.
Например:
class User < ActiveRecord::Base
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :users
end
Итак, чтобы получить сообщения пользователя, я могу использовать user.posts , но чтобы получить пользователя сообщения, я не могу сделать обратное:сообщение.пользователь
Если я добавлю "пользовательский" метод к модели Post, это сработает, но, похоже, это не лучший способ.
class Post < ActiveRecord::Base
belongs_to :users
def user
User.find(self.user_id)
end
end
Если вы посмотрите на этот пост в блоге http://www.fortytwo.gr/blog/18/9-Essential-Rails-Tips в качестве примера вы можете видеть, что автор использует post.user.username, который не работает из коробки, а также :include => [:user], который также не работает, даже с методом "user" в модели Post.
Я знаю, что это элементарно, так что спасибо за ваше терпение.Я просто хочу знать, как наилучшим образом реализовать это отношение.
Моя главная цель - написать "находки", используя вложенные включения, которые ссылаются на пользователя следующим образом:
опубликовать = Post.find(:все, :включить => [:пользователь])
Когда я пытаюсь это сделать, я получаю "ActiveRecord::ConfigurationError:Ассоциация с именем "пользователь" не найдена;может быть, вы неправильно написали это?"
Большое спасибо.
Решение
Я немного новичок в Rails, но это должно работать автоматически...
Ah - вы назвали родительский класс в Post как belongs_to :users
;но поскольку он принадлежит только одному пользователю, Rails ожидает belongs_to :user
(или, конечно, belongs_to :users, :class_name => "User"
).
Это:
class Post < ActiveRecord::Base
belongs_to :user
end
должен выполнить эту работу.
Другие советы
Принадлежность к модели должна быть в единственном числе.Нравится
belongs_to :user