2010-09-04 90 views
0

我來自Grails,我是Ruby on Rails的新手。發送輸入到params

所以,我知道,當你創建一個像一個符號的form_for:用戶(「鍵」),submited當PARAMS []收到一個新的關鍵「:用戶」,並從它的相應值:

<% form_for :user do |form| %> 
    <fieldset> 
     <legend>Password</legend> 

     <label for="current_password"> Current password:</label> 
     <%= form.password_field :current_password %> 
     <br> 

     <label for="password"> New password:</label> 
     <%= form.password_field :password %> 
     <br> 

     <label for="password_confirmation"> Confirm password:</label> 
     <%= form.password_field :password_confirmation %> 
     <br> 
    </fieldset> 
    <%= submit_tag "Update", :class => "submit" %> 
<% end %> 

params [:user => {:current_password => 123,:password => 321,:password_confirmation => 321}],對不對?

嗯,問題是,Rails不明白:current_password和:password_confirmation,我不知道問題是關於模型用戶沒有這些屬性,只有名稱,密碼和電子郵件。

錯誤:未定義的方法`password_confirmation =」#爲

有另一種方式來解決它,而無需創建兩個符號的attr_accessor?我只想使用一個簡單的密鑰在裏面的動作,如:

if params[:user].password = params[:user].password_confirmation 

do something... 
+0

在Rails最受歡迎的書中,他們使用attr_accessor進行密碼確認。無論如何,在將其傳遞給模型更新方法之前,您總是可以從哈希中刪除該密鑰。 – 2010-09-04 19:35:45

回答

0

PARAMS嵌套在一個哈希。所以,你訪問它是這樣的:

if params[:user][:password] == params[:user][:password_confirmation] 
    # do stuff 
end 
1

PARAMS是哈希類。實際上這不是簡單的哈希類,它是HashWithIndifferentAccess,它增加了同時使用字符串和符號訪問哈希的可能性。

你需要的是理解和http://ruby-doc.org/core/classes/Hash.html也在http://guides.rubyonrails.org/

在你的榜樣,你也使用分配=,而不是等於==牌子,上面寫着一些例子。在開始在rails世界中挖掘之前,最好閱讀一些關於ruby的手冊。

因此修復你的錯誤應該是這樣的:

if params[:user][:password] == params[:user][:password_confirmation] 

Authlogic設計寶石由自理的做到這一點。在你發現你知道所有的選擇並卡在牆後之前,不要重新發明輪子。