Направляющие: Вернуться для моделирования объекта принадлежит

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

Например:

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, который не работает из поля, а также: включайте => [: пользователь], который также не работает, даже с "пользовательским" методом в модели Post.

Я знаю, что это является элементарным, так спасибо за Ваше терпение. Я просто хочу знать лучший способ выполнить это отношение.

Моя главная цель состоит в том, чтобы записать, "находит", что вложенное использование включает, которые вернулись пользователю как так:

отправьте = Post.find (: все: включайте => [: пользователь])

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

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

6
задан Simone Carletti 6 January 2010 в 16:44
поделиться

1 ответ

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

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

То есть:

class Post < ActiveRecord::Base
  belongs_to :user
end

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

.
8
ответ дан 16 December 2019 в 21:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: