2010-07-15 75 views
1

這裏的頁面模板我有:NoMethodError在Rails頁

<h1>Editing user</h1> 

<% form_for(@user) do |f| %> 
    <%= f.error_messages %> 
    <p> 
     <%= f.label :forename %><br /> 
     <%= f.text_field :forename %> 
    </p> 
    <p> 
     <%= f.label :surname %><br /> 
     <%= f.text_field :surname %> 
    </p> 
    <p> 
     <%= f.label :address %> 
     <%= f.text_field :address %> 
    </p> 
    <p> 
     <%= f.label :postcode %> 
     <%= f.text_field :postcode %> 
    </p> 
    <p> 
     <%= f.label :contact_number %> 
     <%= f.text_field :contact_number %> 
    </p> 
<% end %> 

<%= link_to 'Show', @user %> | 
<%= link_to 'Back', users_path %> 

控制器實際上是從AdminController子類型爲有一個單獨的部分,如下類的聲明顯示:

class Admin::UsersController < ApplicationController 

與編輯方法如下:

def edit 
    @user = User.find(params[:id]) 
end 

隨着誤差如下:

undefined method `user_path' for #<ActionView::Base:0x104369fe8> 

及以下在我的路線:

map.namespace(:admin) do |admin| 
    admin.resources :pages 
    admin.resources :treatments 
    admin.resources :users 
    admin.resources :finances 
end 

所以我有點卡住,因爲它是在做它的form_for(@user)。我以前見過這個,但不知道如何診斷它不幸。

回答

3

由於您使用的名稱間隔路線,你必須指定在form_for調用的名稱空間。

<% form_for([:admin, @user]) do |f| %> 

參考documentation更多細節(提示:閱讀Resource-oriented style節結束)。

0

不是名稱間距改變命名路徑,所以也許需要在這樣的形式顯式它?

form_for (@user, :url => admin_user_path) do |f| 
+0

這對編輯方案不起作用,因爲URL將有所不同。 – 2010-07-15 17:14:19

+0

@KandadaBoggu。我明白,但那麼你可以使用'edit_admin_user_path'作爲這種情況,不是嗎?但無論如何,我更喜歡你的答案 – bjg 2010-07-15 17:29:04

+0

是的,你是對的。你必須有額外的代碼來檢查對象的狀態並相應地設置url。 – 2010-07-15 17:54:03

0

對於您所使用的命名空間....鏈接將

<% form_for @user, edit_admin_user_path(@user.id) do |f|%> 
    ..... 
<% end %> 

執行rake routes以查看名稱空間控制器的路由外觀如何