2011-01-29 2 views
3

Итак, извините, если это не встречается когерентно ... Я не знаю всей моей терминологии Ruby/Rails (пока).Доступ к атрибуту связанной модели в Rails

У меня есть модель под названием «Профиль» и модель под названием «User, и два связаны, как это:

class Profile < ActiveRecord::Base 
belongs_to :user 
class User < ActiveRecord::Base 
has_one :profile 

Теперь, в„индекс“и„“мнения показывают профилей, которые я сделал, я хочу, чтобы иметь возможность получить доступ к «имя» атрибут из модели пользователя Как я могу это сделать, я предположить, что я нужно что-то в контроллере, который выглядит следующим образом:.?

class ProfilesController < ApplicationController 
    def show 
    @user = User.find(params[:user_id]) 

И тогда доступ это выглядит следующим образом:

<%= @user.name %> 

Но этот бит кода прямо там не работает.

Спасибо за помощь.

+0

, пожалуйста, подробно расскажите о том, как «не работает». любой экран ошибки? – Mauricio

ответ

0

Ваш контроллер должен работать. Эта часть верна.

несколько вопросов

ли ваш профиль в user_id?

Произошла миграция, которая создала атрибуты user_id для Profile и profile_id для User?

+0

В «Профиль» есть атрибут user_id, но атрибут profile_id отсутствует в «Пользователь». Должно быть? Кроме того, столбец user_id пуст в каждом профиле при проверке SQL DB. Это ... не может быть прав. – rottendevice

+0

Хм .. были профили созданы ** после ** вы внедрили отношение в моделях? – Trip

4

Если атрибут name принадлежит модели профиля, на ваш взгляд:

<%= @user.profile.name %> 

Если атрибут name принадлежит пользователя модели , пожалуйста, остановите сервер, запустите rake db:migrate к убедитесь, что каждая миграция была применена к вашей базе данных; затем запустить rails console или ruby script/console, чтобы проверить, если attribe работает для вашей модели:

> u = User.first 
> u.name 

Если последняя команда возвращает пустую строку или имя первого пользователя, все работает. Если вы получите NoMethodError: undefined method, вы должны проверить свою базу данных, поскольку, вероятно, отсутствует столбец, который должен обрабатывать атрибут name.

+0

Спасибо за это! Атрибут 'name' является частью модели User, и когда я запускаю команды консоли rails, я возвращаю строку первого пользователя в БД. Тем не менее, как мне получить доступ к User.name в представлении «Профиль»? – rottendevice

+0

Пожалуйста, попробуйте '<% = @ user.inspect%>' вместо '<% = @ user.name%>', чтобы убедиться, что запись, которую вы ожидаете загрузить, была правильно загружена в контроллер. Отредактируйте и перезагрузите представление в своем браузере. – lbz

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