繁体   English   中英

如何获得带有参数的正确信息?

[英]How can I get correct infromation with params?

我将列信息添加到模型User中,该信息是由devise生成的。 我不想让用户通过注册来填写字段信息。 我为个人资料等其他页面创建了控制器

class PagesController < ApplicationController

  def myprofile
    @currentUser = User.find_by_id(current_user.id)
  end

  def userinfo
    @currentUser = User.find_by_id(current_user.id)

    if request.post?
      if @currentUser.update(params[:userinfo].permit(:information)) 
        redirect_to myprofile_path
      else
        render 'userinfo'
      end
    end
  end

end

页面上的userinfo用户应该能够编辑他的信息。

这是视图:

<div id="page_wrapper">

  <h2>Hey, <%= @currentUser.username %>, add some information about you: </h2>
  <%= form_for @currentUser.information do |f| %>
    <p>
      <%= f.label :information %><br />
      <%= f.text_area :information, autofocus: true %>
    <p>

    <p>
      <%= f.submit "Save" %>
    <p>
  <% end %>

</div>

应用控制器:

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected
  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :information, :email, :password, :password_confirmation, :remember_me) }
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :information, :email, :password, :remember_me) }
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :information, :email, :password, :password_confirmation, :current_password) }
  end
end

当我尝试保存它时,我得到

nil:NilClass的未定义方法“ permit”

我该如何解决? 也许有更好的方法来完成这项工作? 我不想显示整个表单来编辑密码,用户名等。仅提供信息。

nil:NilClass的未定义方法“ permit”

你做错了。 您的params将不包含:userinfo键。 您的params将如下所示:user => {:information => 'value'} 您应该将代码更改为以下

#controller
def userinfo
  @currentUser = User.find_by_id(current_user.id)

  if @currentUser.update(user_params) 
    redirect_to myprofile_path
  else
    render 'userinfo'
  end
end

protected
def user_params
  params.require(:user).permit(:information)
end

而且,当您尝试更新某些记录时,您需要更改

<%= form_for @currentUser.information do |f| %>

<%= form_for @currentUser, method: put do |f| %>

最后,如果您为此相应的controller#action设置了post路线,则需要将其更改为put

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM