2010-04-15 4 views
2

Это может быть глупый вопрос, но я просто начинаю изучать Rail, поэтому я задаю вопрос thsi.Модель Rails относится к модели, которая относится к модели, но я хочу использовать другое имя

У меня есть одна модель под названием «Пользователь», которая обрабатывает всех пользователей в моем сообществе. Теперь я хочу добавить гостевую книгу для каждого пользователя. Таким образом, я создал модель под названием «user_guestbook» и вставил это в новую модель:

belongs_to :user 

и это в модели пользователя:

has_one :user_guestbook, :as => :guestbook 

Следующая вещь, которую я сделал, чтобы добавить новую модель обрабатывать сообщения внутри гостевой книги. Я назвал его «guestbook_posts» и добавил этот код в новую модель:

belongs_to :user_guestbook 

И это в модели user_guestbook:

has_many :guestbook_posts, :as => :posts 

Что я хотел для того чтобы достигнуть должен был быть в состоянии извлечь все сообщения определенному пользователю:

@user = User.find(1) 
puts @user.guestbook.posts 

Но это не работает для меня. Я не знаю, что я делаю неправильно, и если есть более простой способ сделать это, скажите мне об этом.

Просто к сведению, я создал несколько миграций для него, чтобы следующим образом:

create_user_guestbook:

t.integer :user_id 

create_guestbook_posts:

t.integer :guestbook_id 
    t.integer :from_user 
    t.string :post 

Заранее спасибо!

+0

Вы получаете какие-либо ошибки? –

+0

То, что это неопределенный метод – Lisinge

ответ

3

Я думаю, что это должно быть:

#user 
has_one :guestbook, :class_name => "UserGuestbook" 

#user_guestbook 
belongs_to :user 
has_many :posts, :class_name => "GuestbookPost" 

#guestbook_posts 
belongs_to :user_guestbook 

Чтобы получить все сообщения, которые принадлежат к одному user, вы можете добавить эту строку в модели user «s

has_many :posts, :through => :guestbook 

И затем, вызов это:

@user.posts 
+0

попробует это. спасибо – Lisinge

+0

Я получаю «не могу преобразовать класс в strin» при выполнении @user = User.find 1, а затем @ user.guestbook – Lisinge

+2

Код пропущен, процитированный вокруг значения 'class_name'. Попробуйте обновленный код. –

Смежные вопросы