在编写了users_signup_test.rb代码并期望得到绿色响应后,由于某种原因,它仍然失败。该教程说,我应该得到一个绿色的反应在这个阶段,但我不是。这就是我所收到的:
1) Error:
UsersSignupTest#test_invalid_signup_information:
ActiveModel::ForbiddenAttributesError: ActiveModel::ForbiddenAttributesError
app/controllers/users_controller.rb:12:in `create'
test/integration/users_signup_test.rb:8:in `block (2 levels) in <class:UsersSignupTest>'
test/integration/users_signup_test.rb:7:in `block in <class:UsersSignupTest>'
16 runs, 31 assertions, 0 failures, 1 errors, 0 skips我唯一需要做的偏离书可能会影响到这一点,这是我在user.rb模型中必须做的一件事,它如下所示:
validates( :email, presence: true, length: { maximum: 255}, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false } )相对于这本书:
validates( :email, presence: true, length: { maximum: 255}, format: { with: VALID_EMAIL_REGEX }, uniqueness: case_sensitive: false )这会给我一个错误。
这是我的users_signup_test.rb文件:
require 'test_helper'
class UsersSignupTest < ActionDispatch::IntegrationTest
test "invalid signup information" do
get signup_path
assert_no_difference 'User.count' do
post users_path, user: { name: "", email: "user@invalid", password: "foo", password_confirmation: "bar" }
end
assert_template 'users/new'
end
end如果需要其他代码来帮助诊断这个问题,请告诉我。
另外,我还遇到了其他人使用sass-rails 5.0.1的问题,因此我使用的是sass-rails 5.0.2。
谢谢大家的帮助。
发布于 2015-09-13 20:10:44
在创建用户时,您是否有良好的定义所需的参数(user_params函数)?如果您正在学习本教程,您应该在您的users_controller.rb中以类似这样的内容结束
class UsersController < ApplicationController
def create
@user = User.new(user_params)
# more logic
end
private
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
end因为看起来您传递的是控制器不允许的用户参数。
发布于 2015-09-13 20:18:20
找到答案了!
对这个不必要的职位很抱歉。对误差进行了研究,发现误差与强参数有关。仔细看了看这本书,我错过了这句话:
@user = User.new(user_params)它改变了
@user = User.new(params[:user])所以我没有把参数正确地传递给控制器。对不起大家!
https://stackoverflow.com/questions/32553948
复制相似问题