2012-12-29 47 views
0

我有一個需要更新用戶對象屬性的表單。無法獲取此表單

下面是我歸結爲三個步驟:

  1. 「新」的動作需要提供形式與對象操縱

  2. 形式需要知道哪些反對收集值

  3. 時提交表單,它需要這些PARAMS發送到更新用戶對象的函數

如果這一切都是猶太潔食這裏是我所做的嘗試和做到這一點。

內,我已經嘗試向用戶提供的對象,像這樣的「新」行動:

 @current_user = current_user 

然後,在視圖中,這是形式的樣子:

<%= form_for (@current_user) do |f| %> 
    <%= f.label :target_bf_pct %> 
    <%= f.text_field :target_bf_pct %> 

    <%= f.label :activity_factor %> 
    <%= options_for_select([['Sedentary (Desk Job)', 1.2], 
              ['Light Activity (1-3 day a week)', 1.35], 
              ['Moderate Activity (3-5 days a week)', 1.55], 
              ['Very Active (6-7 days a week)', 1.75], 
              ['Extremely Active (Atheletic Endurance)', 1.95]]) 
%> 

    <%# f.submit "Post", class:"btn btn-large btn-primary" %> 
<% end %> 

的錯誤我得到在這一點是這樣的:

undefined method `user_path' for #<#<Class:0x007fd943d00d08>:0x007fd944e5b6c0> 

這是指形式@current_user對象的假設

  1. 我使用devise我的會話控制器創建新用戶和處理會話:對應於@current_user實例的新的行動中......

    的重要注意事項。

  2. 我不相信,我使用的形式助手options_for_select的正在使用得當,因爲我還沒有分配給它來代表一次選擇像「activity_factor」

回答

1
<%= form_for(@current_user) do |f| %> 
      ^no space please :) 

這不是一個玩笑。

<%= form_for (@current_user) do |f| %> 

會的工作,但是,例如:

<%= form_for (@current_user, :class => "user_form") do |f| %> 

不會。隨着空間的增加,你正在努力去做那樣的錯誤。

第二個。您的環境不知道user_path

添加到routes.rb中(即使色器件的陳述存在):

resources :users 
+0

大聲笑好吧我會確保不是那些。我傾向於在各處添加這樣的空間。 –

+1

@ ninja08小心空格... –

+0

添加資源:用戶做到了!謝謝!我也刪除了空格。謝謝你的提示。 –

3

這它應該值錯誤可能來自form_for幫手。它試圖找出表單的action URL,因此它觀察到@current_userUser,因此請致電user_path(@current_user)。如果方法未定義,通常意味着沒有爲users#update定義的路由。

嘗試運行rake routes並確認存在users#update路由。如果沒有,請添加並重試。

此外,幾個音符:

  • 如果你正在尋找更新現有的用戶,形式也許應該在edit行動。 new操作通常保留用於創建全新用戶。
  • 幫助器current_user可在控制器和視圖中訪問。所以,你可以直接在視圖中使用current_user;在控制器中設置它有點多餘。只是一件小事。
  • Devise提供了自己的users#edit表格和users#update更改密碼等操作。我不確定詳細信息,但只要所有要編輯的字段都標記爲attr_accessible,Devise似乎很容易覆蓋現有的表單。如果將這些字段合併到現有的Devise表單中是合適的,那麼這可能值得進行一些研究。
+0

謝謝您的回答Matchu!我正在研究你現在所建議的一切。 –