好的,所以我看到了与这个问题相关的其他主题,但到目前为止,根据他们的建议,我没有运气解决问题。
我正在尝试测试不成功的修改,但我一直有一个错误,其中' 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 %>