2011-03-29 43 views
0

我在我的應用程序中使用由標準腳手架生成器生成的視圖的「帳戶角色」控制器(對於我的AccountRole模型)。該控制器使用下面的路由配置嵌套到我的賬戶「控制器(我的賬戶模型):使用標準腳手架form_for與定製的寧靜資源:控制器

resources :accounts do 
    resources :people, :controller => :account_roles 
end 

這導致路由助手像account_people_path/accounts/1/people)和account_person_path/accounts/1/person/1)。一切都很好。

我的問題是在默認生成的_form.html.erb部分。這個文件看起來是這樣的:

<%= form_for([@account,@account_role]) do |f| %> 
    <!-- Rest of form --> 
<% end %> 

我已經定製了這個觀點,以應付嵌套的資源,但我用我的路由:controller選項是造成我的問題,我認爲。

我對「新」和「編輯」的觀點(兩者都使用該部分)是導致以下錯誤觀點規格:

ActionView::Template::Error: 
    undefined method `account_account_role_path' for #<#<Class:0x105334360>:0x105300c18> 

認爲這裏發生了什麼是的form_for是試圖'猜測'這些資源的路線助手。我知道我可以通過將:url選項用於form_for來覆蓋url,但是這感覺就像是一個cop-out。

我是否錯過了一個明顯的解決方案,使我可以將:控制器路由選項與form_for的資源導向風格相結合?

+1

是你的模型AccountRole還是Person? – Vadim 2011-03-29 22:27:32

+0

Hi @Vadim,模型是AccountRole。將更新的問題,以明確這一點。 – 2011-03-29 22:33:05

回答

0

路線雖然這是一個有些舊的帖子,我用這個努力爲好。

我的解決方案是使用url選項指定路徑。

在我的情況(這是略有不同,但是從controller: "AccountRoles"東西還是源於)我必須做到以下幾點:

resources :clients, controller: "AccountClients" 


= form_for @client, url: clients_url(@client) do |f| 
    = f.error_messages 
    %p 
    = f.label :name 
    = f.text_field :name 

    %p= f.submit 

所以你@client變量傳遞給的形式,但也設置了正確的網址爲url:

在你的情況我估計這將是:

<%= form_for([@account,@account_role], 
     url: account_people_path([@account,@account_role])) do |f| %> 
    <!-- Rest of form --> 
<% end %> 

希望這有助於在同樣的問題沒有人來。

1

如果像我這樣的人仍然在尋找這個問題的答案,我想我只是想出了它。 我做了什麼,你的情況是

map.resources:account_roles,:as =>「people」 map。資源:人,:控制器=>「account_roles」

它爲我做了詭計。