2017-05-15 19 views
0

ヘルプpls。どのように私はこのエラーを持っているのか分かりません。私はユーザーのプロファイルを作成しようとしています。このエラーはプロファイルの作成アクションから発生したようです。それは私にはOKに見えますが、明らかにそれはProfilesControllerのNoMethodError#create

ではありません作成しようとしている時に

エラーは言う:

undefined method `build_profile' for #<Profile:0x5ffcca0> 
app/controllers/profiles_controller.rb:27:in `create' 

プロフィールコントローラ:

class ProfilesController < ApplicationController 
    before_action :authenticate_user! 
    before_action :set_profile, only: [:show, :edit, :update, :destroy] 

    def index 
    @profiles = Profile.all 
    end 

    def edit 
    @profile = Profile.find(params[:id]) 
    end 

    def show 
    @profile = Profile.find(params[:id]) 
    end 

    def new 
    @profile = Profile.new 
    @profile.first_name = current_user.first_name 
    @profile.last_name = current_user.last_name 
    @profile.account_type = current_user.account_type 
    @profile.email = current_user.email 
    end 

    def create 
    @profile = Profile.new(profile_params) 
     if @profile.save 
     redirect_to root_path 
     else 
     render 'new' 
     end 
    end 

    def update 
    @profile = Profile.find(params[:id]) 
     if @profile.update(profile_params()) 
     flash[:sucess] = "Sucessfully updated" 
     redirect_to profile_path(@profile.id) 
     else 
     flash[:error] = "Error"  # Optional 
     render "profiles/edit" 
     end 
    end 

    def destroy 
    @profile = Profile.find(params[:id]) 
    @profile.destroy! 
    redirect_to "/profiles/show" 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def profile_params 
     params.require(:profile).permit! 
    end 
end 

プロファイルモデル:

class Profile < ActiveRecord::Base 
    belongs_to :user 
    before_create :build_profile 
end 

スキーマのプロフィール

create_table "profiles", force: :cascade do |t| 
    t.string "first_name" 
    t.string "last_name" 
    t.string "username" 
    t.string "gender" 
    t.date  "birthday" 
    t.string "email" 
    t.string "account_type" 
    t.datetime "created_at",  null: false 
    t.datetime "updated_at",  null: false 
    t.string "handedness" 
    t.string "coach" 
    t.date  "date_joined" 
    t.integer "year" 
    t.string "course" 
    t.string "main_weapon" 
    t.string "additional_weapon" 
    t.integer "cellphone_number" 
    t.integer "emergency_contact" 
    t.string "contact_name" 
    t.string "contact_rel" 
    t.string "player_status" 
    t.integer "user_id" 
    end 
+0

定義を提供してください。 'profile_params'のうちの一つです。 –

+0

エラーメッセージ、フルコントローラファイル、profile.rb、および移行ファイルを表示します。 – hashrocket

+0

は編集しました – Kevin

答えて

1

build_profileのメソッドは、あなたのProfileクラスにはありません。 Model)、しかし、あなたはbefore_createコールバックでそれを呼び出す:あなたはヨーヨーがクラス内build_profileを定義(またはどこか他の場所からそれを含め、moduleのように必要

class Profile < ActiveRecord::Base 
    belongs_to :user 
    before_create :build_profile 
end 

):

class Profile < ActiveRecord::Base 
    belongs_to :user 
    before_create :build_profile 

    private 
    def build_profile 
     # method code... 
    end 
end 
関連する問題