0

私のプロファイルモデルbelongs_to:user "User model"から "profiles"テーブルにアクセスしたいと思います。ruby​​ on railsでプロファイルモデルインサイダーusers_controllerにアクセスするにはどうすればよいですか?

まずはusers_controllerの私のショーアクションで、ユーザープロファイルページに表示するためにプロファイルテーブルからデータを取得したいと思います。

第2に、ユーザーがフォームを使用してこれらのものを編集できるようにしたいと思います。私はこれが更新アクションで行われたことを知っていますか?編集アクションが編集ビューページにあるフォームを表示することが可能になりながら...ここ

は私のコントローラである:

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経由でそれを行う方法があると確信しています。

アドバイスをいただきありがとうございます。

ビュー:users_controllerを通じてプロファイルテーブルからのfirst_nameを引っ張って

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

    end 

ルートしようと

<%= @profile_data.first_name %> 

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

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にユーザプロファイルを持っています。ここではその "一致"のルートがあります:username => "users#show" "今、私は自分のデータをユーザページに表示します私はそれを訪問する。ですから、ショービューでは、@ variable_set_in_controller.first_nameを使って名前を取得できるかどうかを確認します。ショーアクションでは、私はすべてを試してもまだ運がありません。私はちょうどプロファイルテーブル/プロファイルモデルからusers_controllerのshowアクションに情報を取り込めるようにしたいです。 – LondonGuy

0

ユーザモデルにhas_one:profileを、 d a belongs_to:userをプロファイルモデルに追加し、適切なuser_id列がプロファイルテーブルにあることを確認します。ユーザーモデルにaccepts_nested_attributes_for:profileを追加すると、ユーザーを編集するために同じフォームでユーザーのプロファイルを作成/編集できます。

レールrelease notes on nested attributesおよびガイド:associationsおよびformsをお読みください。

+0

幸運にも、私はshowアクションでユーザ名でfindを使ってみましたが、何らかの理由で私のログに "favicon"というユーザ名が見つかりました。意味がありません。 – LondonGuy

関連する問題