ActionController :: ParameterMissing:param丢失或值为空:user - 不明白

时间:2016-07-28 17:53:27

标签: ruby-on-rails ruby edit params

好的,所以我看到了与这个问题相关的其他主题,但到目前为止,根据他们的建议,我没有运气解决问题。

我正在尝试测试不成功的修改,但我一直有一个错误,其中' user'

缺少参数。

这是控制器代码:

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

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

  def create
    @user = User.new(user_params)
    if @user.save
      log_in @user
      flash[:success] = "Welcome to the Site!"
      redirect_to @user
    else
      render 'new'
    end
  end

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

  def update
    @user = User.find(params[:id])
    if @user.update_attributes(user_params)
    else
      render 'edit'
    end
  end


  private


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

查看:

<% provide(:title, "Edit User") %>
<% provide(:button_text, "Save changes") %>
    <h1>Edit your profile </h1>
<div class="row">
  <div class="col-md-6 col-md-offset-3 well">
    <%= render 'shared/form' %>
    <div class="gravatar_edit">
         <%= gravatar_for @user %>
         <a href="http://gravatar.com/emails" target="_blank">Change</a>
    </div>
  </div>
</div>

以下是我对不成功编辑的测试:

    require 'test_helper'

class UsersEditTest < ActionDispatch::IntegrationTest

  def setup
    @user = users(:robert)
  end

  test "unseccessful edit" do
    get edit_user_path(@user)
    assert_template 'users/edit'
    patch user_path(@user), params: { user: { name:       "",
                                              email:      "invalid@invalid.org",
                                              password:   "in  ",
                                              password_confirmation: "    valid" } }
    assert_template 'users/edit'
  end
end

现在,我尝试从(user_params)删除if @user.update_attributes,但这没有任何区别。我还从.requre(:user)删除了def params,但这只会导致更多错误。

修改

以下是我使用的表格:

<%= form_for(@user) do |f| %>
<%= render 'shared/error_messages', object: @user %>

    <%= f.label :name %>
    <%= f.text_field :name, class: 'form-control' %>

    <%= f.label :email %>
    <%= f.email_field :email, class: 'form-control' %>

    <%= f.label :password %>
    <%= f.password_field :password, class: 'form-control' %>

    <%= f.label :password_confirmation %>
    <%= f.password_field :password_confirmation, class: 'form-control' %>

    <%= f.submit yield(:button_text), class: 'btn btn-primary' %>

<% end %>

0 个答案:

没有答案