ruby-on-rails - 如何解决编辑对象时强参数矛盾?

标签 ruby-on-rails ruby-on-rails-4

我面临的问题很可能与强参数有关。问题是,当我尝试编辑一些用户信息并更新它时,出现与此表单无关的错误。这种错误应该仅在注册或登录时才会弹出。

例如,这是我的数据库。然后我点击“编辑”。

enter image description here

编辑一些信息并提交后,弹出错误。

enter image description here

controllers/users_controller.rb

class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      session[:user_id] = @user.id
      redirect_to [@user, @task], notice: "Thank you for signing up!"
    else
      render "new"
    end
  end

  def index
    @users = User.all
  end

  def show
    @user = User.find(params[:id])
  end

  def edit
    @user = User.find(params[:id])
  end

  def update
    @user = User.find(params[:id])

    if @user.update(user_params)
      redirect_to @user
    else
      render 'edit'
    end
  end

  def destroy
    @user = User.find(params[:id])
    @user.destroy
    respond_to {|format| format.js }
  end

  private


  def user_params
    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation)
  end
end

views/user/edit.html

<h1>Editing user</h1>

<%= form_for :user, url: @user, method: :patch do |f| %>

  <% if @user.errors.any? %>
    <div id="error_explanation">
      <h2>
        <%= pluralize(@user.errors.count, "error") %> prohibited
        this task from being saved:
      </h2>
      <ul>
        <% @user.errors.full_messages.each do |msg| %>
          <li><%= msg %></li>
        <% end %>
      </ul>
    </div>
  <% end %>

  <p>
    <%= f.label :first_name %><br>
    <%= f.text_field :first_name %>
  </p>

  <p>
    <%= f.label :last_name %><br>
    <%= f.text_field :last_name %>
  </p>

  <p>
    <%= f.submit %>
  </p>
  <%= link_to 'Back to List', users_path %>

<% end %>

models/user.rb

class User < ActiveRecord::Base
  has_secure_password

   EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :first_name, presence: true,
            length: {maximum: 20}
  validates :last_name,  presence: true,
            length: {maximum: 40}
  validates :email, presence: true,
            format: {with: EMAIL_REGEX},
            uniqueness:  {case_sensitive: false}
  validates :password,
            length: {within: 6..40}

  has_many :tasks
end

我该怎么办?有人可以帮忙吗?

最佳答案

问题是强参数有关。这是由于您对密码进行了验证

这个

validates :password,length: {within: 6..40}

应该是

validates :password,length: {within: 6..40}, on: :create

关于ruby-on-rails - 如何解决编辑对象时强参数矛盾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31503396/

相关文章:

activerecord - 验证存在和唯一性,Rails 4

ruby-on-rails - 如何使用 Rails 4 和 simple_form 正确设置复选框以保存到数据库?

ruby-on-rails - CSV - 未加引号的字段不允许\r 或\n(第 2 行)

ruby-on-rails - 如何用 Sunspot 突出显示找到的单词?

ruby-on-rails - 如何实现像Stack Overflow一样的搜索

ruby - ActiveModel::Serializer::CollectionSerializer

ruby-on-rails - Rails 4.0 的任何社交网络引擎/ gem ?

ruby-on-rails - 无法使用 Postgres.app 在 Mavericks 中安装 pg gem

ruby-on-rails - Rails 4:在生产环境的控制台中显示SQL

heroku - 如何使用 Asset Pipeline 从非标准目录传送字体