0

我有一个简单的注册表单:

<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。为什么密码是零?我检查了 HTML 参数并得到了这个:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"aAcaURTLKfwmXULEUzLX36tZAKER/kMxKKOROOXgoU8=", "user"=>{"username"=>"Chris", "password"=>"[FILTERED]"}, "commit"=>"Save"}

这是否"[FILTERED}"意味着它不是一个字符串?我怎样才能访问它params

4

1 回答 1

2

它不是零,它只存在于:user中,所以试试

params[:user][:password].crypt("$1$")

事实上,你在这里的所有参数都是不正确的,所有字段都由 :user 限定,这是 form_for 自动为你做的事情之一。

所以要获得用户名,你会想说params[:user][:username].

于 2012-02-27T20:41:26.107 回答