我有一个简单的注册表单:
<h1>Signup as a new user</h1>
<%= form_for(@user) do |f| %>
<p>
<%= f.label :username %>
<%= f.text_field :username %>
</p>
<p>
<%= f.label :password %>
<%= f.password_field :password %>
</p>
<p>
<%= f.submit "Save" %>
</p>
<% end %>
重定向到UsersController的create方法:
def create
password = params[:password].crypt("$1$}")
@user = User.new(:username => params[:username], :password => password)
@user.save
flash[:message] = "User #{User.username} created!"
redirect_to user_path(@user)
end
但这会引发错误undefined method crypt' for nil:NilClass
。为什么密码是Nil?我检查了HTML参数并得到了这个:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"aAcaURTLKfwmXULEUzLX36tZAKER/kMxKKOROOXgoU8=", "user"=>{"username"=>"Chris", "password"=>"[FILTERED]"}, "commit"=>"Save"}
"[FILTERED}"
是否意味着它不是字符串?如何从params
访问它?
答案 0 :(得分:2)
它不是零,它只存在于:user中,所以试试
params[:user][:password].crypt("$1$")
实际上你所有的params都在这里工作是不正确的,所有字段的作用域都是:user,这是form_for自动为你做的事情之一。
因此,要获取用户名,您需要说params[:user][:username]
。