2016-05-31 63 views
1

路由是正確的,不知道還有什麼是關閉的? 在「更新」頁面(當路由更新)我得到的錯誤param丟失或者值爲空:用戶(devise rails gem)

參數是丟失或爲空值:用戶

這是謀害我的第二個自定義視圖頁面另一個正在使用類似的代碼。

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' 

我的用戶控制器 -

 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 

然後我的觀點的form_for呼籲

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

你在哪裏創建@user? – Thorin

+0

@Thorin假設有用戶的「at」符號(溢出限制了他們在評論中的使用) line 2 user = User.find(current_user.id) – whataboutme1

+0

需要看到你形成參數和表單代碼,你能否更新? –

回答

1

想通了這一點對我自己和發表了一篇博客關於它的方法,這裏是我的回答:

在我定製設計這個問題的所有問題中,我可能花費最長的時間來弄清楚。您會收到錯誤做一個常見的錯誤是:

參數是丟失或爲空值:用戶

第一步是創建一個控制器,它繼承了色器件控制器(基本覆蓋它)。這應該進入控制器/用戶內部,並被稱爲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_tag,例如的form_for如下:

<%= 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 %> 

現在重新啓動軌道的服務器和你的手指!

相關問題