2016-05-31 7 views
1

経路は正しいですか?ユーザーparamが見つからないか、値が空です:user(devise rails gem)

これは工夫のための私の2番目のカスタムビューページである:私はエラー

paramは存在しないか、値が空になってしまう「更新」ページ(これルートがを更新する)際に もう1つは同様のコードで作業しています。方法自分でこれを考え出した

<%= form_for(@user, :url => { :action => "update_discovery" }, html: {class: "form floating-label"}) do |f| %> 
+0

ここで@userを作成しますか? – Thorin

+0

@Thorinユーザーのために "at"記号があると仮定します(オーバーフローはその使用をコメントに制限します) 2行 user = user.find(current_user.id) – whataboutme1

+0

paramsとフォームコードを作成する必要があります。 ? –

答えて

1

を呼び出し、それについてのブログを投稿のform_forその後

 def update_discovery 
     @user = User.find(current_user.id) 
     if @user.update(user_params2) 
      # Sign in the user by passing validation in case their password changed 
      sign_in @user, :bypass => true 
      redirect_to root_path 
     else 
      render "edit" 
     end 
    end 



    def user_params2 
    # NOTE: Using `strong_parameters` gem 
    params.require(:user).permit(:discovery, :male, :female, :min_age, :max_age) 

end 

controller-私のユーザー私の見解

routes-

devise_for :users, controllers: {registrations: 'users/registrations'} as :user do end root 'home#home' 

get 'users/discovery_settings' => 'users#discovery_settings' patch 'users/discovery_settings/update' => 'users#update_discovery' 

ここに私の答えがありました:

私がカスタマイズしたすべての問題の中で、これはおそらく私が把握するのに最も長い時間を要したものです。あなたは間違ってこれをやってから受信する一般的なエラーは次のとおりです。

paramが存在しないか、値が空である:ユーザー

第一ステップは、本質的にそれをオーバーライド(工夫コントローラを継承するコントローラを作成することです)。これはコントローラ/ユーザの内部に入り、registration_controller.rbと呼ばれるべきです。

class Users::RegistrationsController < Devise::RegistrationsController 
before_filter :configure_permitted_parameters 

def NAMEOFVIEW 
@user = current_user 
if @user 
render :NAMEOFVIEW 
else 
render file: 'public/404', status: 404, formats: [:html] 
end 
end 

[表示] - 二次顧客の編集のために次のコードを挿入しても、あなたのデータベースにあなたが作る任意のカスタムパラメータをサニタイズする必要があります

def configure_permitted_parameters 
devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit(:username, :email, :password, :name, :user_age, :user_gender) } 
devise_parameter_sanitizer.permit(:account_update) { |u| u.permit(:username, :email, :password, :password_confirmation, :current_password, :name, :user_age, :user_gender, :user_bio) } 

end 

、最後にパスワードなしで更新を許可ルートの下

protected 

def update_resource(resource, params) 
resource.update_without_password(params) 
end 

(デフォルトでは、この力を考案):

Rails.application.routes.draw do 
devise_for :users, controllers: {registrations: 'users/registrations'} 
as :user do 

match 'users/NAMEOFVIEWHERE' => 'users/registrations#NAMEOFVIEWHERE', :via => [:get], :as => 'NAMEOFVIEWHERE' 

その後、以下の例のform_forのform_forやform_tagを使用して行うことができ、あなたのビューでの最終的な変更、:

<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put, class: " html classes here" }) do |f| %> 

<div class="field"> 
<%= f.label :Bio %><br /> 
<%= f.text_area :user_bio, autocomplete: "off", class: "optional html class here", rows: 3, cols: 20, name: "description", placeholder: "About" %> 
</div> 

<div class="optional button class here"> 
<button type="submit">Save</button> 
</div> 
<% end %> 

は、今すぐあなたのレールのサーバーを再起動し、あなたの指を交差さ!

関連する問題