2016-05-31 38 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 %> 

现在重新启动轨道的服务器和你的手指!

相关问题