param丢失或值为空:user(设计gem)

时间:2016-05-31 19:14:50

标签: ruby-on-rails inheritance devise

路线是否正确,不确定还有什么关闭? 在"更新"页面(当它路由到更新时)我收到错误

  

param丢失或值为空:user

这是我设计的第二个自定义视图页面,另一个是使用类似的代码。

路线 -

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

1 个答案:

答案 0 :(得分:1)

我自己想出来并发布了一篇关于它的博客,这是我的回答:

在我已经定制过的所有问题中,我可能需要花费最长的时间来解决这个问题。这样做会导致错误的常见错误是:

  

param丢失或值为空:user

第一步是创建一个继承设计控制器的控制器(基本上覆盖它)。这应该在控制器/用户内部,并称为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服务器并交叉手指!