2011-01-29 2 views
3

이렇게하면 일관성있게 나오지 않아서 미안 해요 ... (아직) 내 모든 Ruby/Rails 용어를 알지 못합니다.Rails에서 링크 된 모델의 속성에 액세스

나는 "프로필"을이라는 모델이라는 모델이 "사용자, 그리고 두 사람은 다음과 같이 연결되어 있습니다 :

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

이제에서"인덱스 "와"프로파일의 쇼 "전망이 I 했다, 나는 사용자 모델에서 속성 "이름"에 액세스 할 수 있도록하려면 내가이 작업을 수행 할 수있는 방법 나는 다음과 같습니다 컨트롤러에 뭔가가 필요합니다 상상 :.?

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

그리고 액세스 다음과 같이보기 :

<%= @user.name %> 

바로 그 코드가 작동하지 않습니다.

도움 주셔서 감사합니다.

+0

'작동하지 않는 방법'에 대해 자세히 알려주십시오. 오류 화면? – Mauricio

답변

0

컨트롤러가 작동해야합니다. 그 부분은 정확합니다.

몇 가지 질문

프로필은 USER_ID이 있습니까?

Profile의 경우 user_id 속성을 사용하고 User의 경우 profile_id 속성을 생성 한 마이그레이션을 실행 했습니까? 속성 name이보기에서 프로필 모델에 속하는 경우

+0

'Profile'에 user_id 속성이 있지만 'User'에 profile_id 속성이 없습니다. 있어야할까요? 또한 user_id 열은 SQL DB를 확인할 때 각 프로필에서 비어 있습니다. 그게 ... 옳지 않아. – rottendevice

+0

흠 .. ** 당신이 모델에서 관계를 구현 한 후에 ** 프로파일이 생성 되었습니까? – Trip

4

:

<%= @user.profile.name %> 

속성 name사용자 모델에 속하는 경우에 rake db:migrate를 실행하는 서버를 중지하십시오 모든 이주가 데이터베이스에 적용되었는지 확인하십시오. 다음 attribe이 모델을 위해 작동하는지 확인하기 위해 rails console 또는 ruby script/console을 실행

> u = User.first 
> u.name 

을 마지막 명령이 모든 것이 작동 빈 문자열 또는 첫 번째 사용자의 이름을 반환합니다. NoMethodError: undefined method을 얻는다면 name 속성을 처리해야하는 열이 아마도 누락되어 데이터베이스를 점검해야합니다.

+0

감사합니다. 'name'속성은 User 모델의 일부이며 레일즈 콘솔 명령을 실행할 때 DB의 첫 번째 사용자 문자열을 반환합니다. 즉, 프로필보기에서 User.name에 어떻게 액세스합니까? – rottendevice

+0

'<% = @ user.name %> '대신'<% = @ user.inspect %>'를 시도해보고로드하려는 레코드가 컨트롤러에 제대로로드되었는지 확인하십시오. 브라우저에서보기를 편집하고 다시로드하십시오. – lbz

관련 문제