2012-02-27 60 views
0

我有一個簡單的註冊表格:的Rails的form_for password_field返回類型

<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 PARAMS和得到這個:

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

是否"[FILTERED}"意味着它不是一個字符串?我如何從params訪問它?

+1

'「[FILTERED]」'表示特定參數已從日誌中刪除,因爲它是敏感信息。根據您的Rails版本,任何名爲「密碼」的字段都會自動過濾。有關更多信息,請參閱此頁面:http://guides.rubyonrails.org/action_controller_overview.html#parameter-filtering – Justin 2012-02-27 23:12:02

回答

2

它不是零,它只是存在的內部:用戶,所以儘量

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

其實這裏所有的則params的工作是不正確,所有的字段由作用域:用戶來說,這是一form_for爲你自動做的事情。

所以要獲得用戶名,你想要說params[:user][:username]