Рельсы:Возвращаясь к модели, к которой принадлежит объект

StackOverflow https://stackoverflow.com/questions/2014274

Вопрос

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

Например:

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top