0

내 프로파일 모델 인 belongs_to : "User model"에서 "profiles"테이블에 액세스하고 싶습니다.레일즈에서 루비의 프로필 모델 내부자 users_controller에 액세스하려면 어떻게해야합니까?

첫 번째로 users_controller의 내 쇼 동작에서 사용자 프로필 페이지에 표시하기 위해 프로필 테이블의 데이터를 가져오고 싶습니다.

두 번째로 사용자가 양식을 사용하여 이러한 것들을 편집 할 수있게하고 싶습니다. 이 작업이 업데이트 작업에서 수행된다는 것을 알고 있습니까? 편집 작업은 그것이 편집보기 페이지에서 양식 .. 여기

을 표시 가능하게하면서 내 컨트롤러는 다음과 같습니다

class UsersController < ApplicationController 



    def new 
    @user = User.new 
    @title = "Practice" 
    end 

    def create 
    @user = User.new(params[:user]) 
    respond_to do |format| 
     if @user.save 
     @user.build_profile.save #same as Profile.new(:user_id => @user.id) 
     login @user 
     UserMailer.join_confirmation(@user).deliver 
     format.js { render :js => "window.location = '#{root_path}'" } 
     flash[:notice] = "Welcome!" 
     else 

     format.js { render :form_errors } 
     end 
    end 
    end 

    def show 

    end 

    def update 

    end 

    def edit 

    end 



end 

1) 어떻게 내 프로필 테이블에 액세스 할 것인가? 사용자 has_one : profile Profile belongs_to : user

감사합니다. 날 반으로 날마다 프로필 테이블에 생성 된 가입시 새로 생성 된 사용자에 해당하는 행을 얻는 방법을 알아 냈습니다. 이제 다음 단계는 내 users_controller에서 모델의 데이터를 가져올 수있는 것입니다. 나는 단지 profiles_controller를 만들고 거기에서 일을 할 수 있다는 것을 알고 있지만 users_controller를 통해 그것을 할 수있는 방법이 있다는 것을 확신하기 때문에 지금 시도하지 않으려 고합니다.

미리 조언 해 주셔서 감사합니다.

보기 :

<%= @profile_data.first_name %> 

<h4><%= current_user.username.capitalize %></h4> 
<%= gravatar_image_tag(current_user.email, :alt => @title, :class => "gravatar", :gravatar => { :size => 150 }) %> 
<br /> 

가 users_controller를 통해 프로파일 테이블에서 FIRST_NAME을 끌어 시도

def show 
    @user = User.find_by_username(params[:username]) 
    @profile_data = @user.profile 

    end 

경로 :

match ':username' => "users#show" 

내가 이름의 FIRST_NAME 컬럼에 저장 것으로 예상 localhost : 3000/username을 방문하면 프로필 테이블

사용자 이름이 표시되지 않습니다.

답변

2

당신은 할 수 있습니다 :

그렇지 않으면 사용자에 속하는 프로파일 돌아갑니다

@user.profile 

:

Profile.where('whatever condition you fancy') 

조건에 따라 프로파일 개체를 반환됩니다

+0

이 오류가 발생합니다. 정의되지 않은 메서드 'profile'for nil : NilClass – LondonGuy

+0

즉 사용자가 비어 있음을 의미합니다.그것을 채워야합니다. 아마도 @user = User.find (params [: id])와 같은 것을 사용하고 있지만 경로를 보지 않고 실행중인 작업을 알지 못한다면 – Yule

+0

프로필 테이블에 데이터가 있습니다. 나는 localhost : 3000/username에 사용자 프로필을 가지고 있으며 여기에 "match '에 대한 경로가 있습니다. username'=>"users # show ""이제는 사용자 페이지에 해당 사용자의 데이터가 표시됩니다. 나는 그것을 구경한다. 따라서 쇼 뷰에서 @ variable_set_in_controller.first_name을 사용하여 이름을 가져올 수 있는지 확인합니다. 쇼 동작에서 나는 모든 것을 시도했지만 여전히 운이 없다. 프로필 테이블/프로필 모델에서 users_controller의 show 액션으로 정보를 가져올 수 있기를 원합니다. – LondonGuy

0

사용자 모델에 has_one:profile, d belongs_to:user을 프로필 (Profile) 테이블에 넣고 프로필 테이블에 적절한 user_id 열이 있는지 확인하십시오. 사용자 모델에 accepts_nested_attributes_for:profile을 추가 한 다음 사용자 편집을 위해 동일한 양식에서 사용자 프로필을 작성/편집 할 수 있습니다.

레일 release notes on nested attributes 및 가이드 : associationsforms을 읽으십시오.

+0

행운을 빕니다, 나는 show 액션에서 사용자 이름으로 찾기를 시도했지만 어떤 이유로 내 로그에 "favicon"이라는 사용자 이름이 있음을 알려주고 있습니다. 말도 안돼. – LondonGuy

관련 문제