我正在尝试在Ruby on Rails教程书中执行第11章,当我尝试在清单11.33中进行集成测试时,我得到两个错误,它们都说" param丢失或值为空:user&# 34 ;.然后在用户控制器定义中列出两行,第一行是对user_params的引用,第二行是对控制器中的create动作的引用。我查看了其他一些问题并根据我尝试删除user_params定义的require(:user)部分的答案,这导致集成测试从有两个错误变为失败。但我不想从user_params定义中删除require(:user)。有谁知道我为什么会收到这个错误?以下是测试中创建错误的部分:
test "valid signup information with account activation" do
get signup_path
assert_difference 'User.count', 1 do
post users_path, params: { user: { name: "Example User",
email: "user@example.com",
password: "password",
password_confirmation: "password" } }
end
以下是user_params的定义,除了此测试
之外def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
答案 0 :(得分:0)
我发现了问题。我通过safari在线书籍和免费在线版本比较了我在线阅读的教程书的版本,发现在那个版本中他们改为使用:
post users_path, user: { name: "Example User",
其中params:{}已从用户周围删除:{} 这一改变使错误消失了。