簡體   English   中英

參數缺失或值為空:用戶(設計 rails gem)

[英]param is missing or the value is empty: user (devise rails gem)

路線是正確的,不知道還有什么是關閉的? 在“更新”頁面(當它路由到更新時)我收到錯誤

參數缺失或值為空:用戶

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

路線-

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

我自己解決了這個問題並發布了一篇關於它的博客,這是我的答案:

在我定制設計的所有問題中,這個問題可能是我想出來的時間最長的一個。 錯誤地執行此操作將收到的常見錯誤是:

參數缺失或值為空:用戶

第一步是創建一個繼承設計控制器的控制器(基本上是覆蓋它)。 這應該進入控制器/用戶並稱為 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 %>

現在重新啟動您的 rails 服務器並交叉手指!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM