kyopa’s blog

自分用プログラミングアウトプット

よくわかっていないけどメモdeviseのsign_upでバリテーションで引っかかった後に再入力するときだけエラーがでる理由

コントローラ

 

def new
@target = Target.new
super
end


def create
super
target = @user.targets.build(target_params)
target.save!
end

 

変更

 

def new
super
resource.targets.build
end


def create
super

end

 

 

アソシエーションをコントローラで記述していたけど

deviseをあまりいじらないほうがいいかなということでコントローラではなくモデルでやることにした。

 

 

 

user.rb追記

accepts_nested_attributes_for :targets

アソシエーションするためこの記述を用意

 

 

アプリケーションコントローラ追記

 

 

def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :avatar, targets_attributes: [:content, :point, :image, :image_cache, :user_id, :luck_id]])
end

 

カラムの追加

 

 

 

 

ビュー

 

 

<%= fields_for(resource.targets.first) do |target| %>

 

 

このように定義

 

resourceはuser.newと同じような役目をしている事を知ったので

このような記述にした

@targetにするとtargetが2つ準備されるみたい

 

targets-attributeでpostするとtargetが生成されるので

@tergetを使わないようにした。

 

 

よくわからないけどそうするとできた