Rails: Возвращаясь к модели, которой принадлежит объект - PullRequest
6 голосов
/ 06 января 2010

Это, вероятно, глупый вопрос, но я не могу найти хорошего ответа. Я хочу знать, как лучше вернуться к модели, которой принадлежит объект.

Например:

class User < ActiveRecord::Base
  has_many :posts
end

class Post < ActiveRecord::Base
  belongs_to :users
end

Итак, чтобы получить сообщения пользователя, я могу использовать user.posts, но чтобы получить пользователя сообщения, я не могу сделать наоборот: post.user

Если я добавляю «пользовательский» метод к модели 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 = Post.find (: all,: include => [: user])

Когда я пытаюсь это сделать, я получаю сообщение "ActiveRecord :: ConfigurationError: Ассоциация с именем 'user' не найдена; возможно, вы ошиблись?"

Большое спасибо.

Ответы [ 2 ]

8 голосов
/ 06 января 2010

Я немного новичок в Rails, но это должно работать автоматически ...

Ах - вы назвали родительский класс в Post как belongs_to :users; но поскольку он принадлежит только одному пользователю, Rails ожидает belongs_to :user (или, конечно, belongs_to :users, :class_name => "User").

То есть:

class Post < ActiveRecord::Base
  belongs_to :user
end

должен сделать работу.

0 голосов
/ 30 ноября 2012

Принадлежит модели должны быть в единственном числе. как

belongs_to :user
...