2009-07-21 25 views
3

は私がフィードを追加するためのフォームを作成しようとしている特異な資源Railsのネストされたルート

map.resource :account, :controller => "users" do |page| 
    page.resources :feeds 
end 

にネストされたルートを持っています。私はこれで始まる...

<% form_for @feed do |f| %> 
undefined method `feeds_path' for #<ActionView::Base:0x2123174> 

だから、私はそれが原因「アカウント」に「ユーザー」から名前を変更すると思い

<% form_for [current_user,@feed] do |f| %> 
undefined method `user_feeds_path' for #<ActionView::Base:0x20b3e00> 

を試してみてください?だから私は試しました

<% form_for account_feeds_path(@feed) do |f| %> 
`@/account/feeds.%23%3Cfeed:0x22ea5c0%3E' is not allowed as an instance variable name 

このエラーが意味するものは分かりません。だから私はこれを行うには、どのように動作しています:

<% form_for @feed, :url=>{:action=>:create} do |f| %> 

これは本当に最善の方法ですか?言い換えれば、このような状況で名前付きルートを使用する方法はありませんか?

+1

'rake routes'を実行し、フィードの表示を見てください。 – Scott

答えて

1

ここでは、ネストされた(+名前付きの)ルートと単一のリソースについて混乱していると思います。私はあなたがしようとしているのは、ユーザ(アカウント)に属している単なるfeedリソースを持っていると思いますよね?

もしそうなら、あなたの既存のルート

map.resource :account, :controller => "users" do |page| 
    page.resources :feeds 
end 

は、おそらくaccountsは、複数のリソースですが、フィードが特異であることを

map.resources :accounts, :controller => "users" do |account| 
    account.resource :feed 
end 

注意する必要があります。これは、あなたのアカウント(ユーザー)のRESTfulルートを提供しますが、単なる「フィード」リソースです。あなたのフィードのIDを参照する必要はありませんが、通常は@ account.feed

rake routesを使用して、これが作成するルートの完全なリストを表示してください。

account_feed_path(@account)たとえば、フィードの[表示]ページが表示されます。

パスは、したがって、あなたがそのようなフォームヘルパーを使用する能力を与える:

<% form_for :feed, account_feed_path(@account) do |f| %> 

<% end %> 
+0

返事をありがとう。実際に私はその反対をしようとしています。すべてのユーザーは1つのアカウントを持っていますが、複数のフィードを持つことができます。したがって、アカウントは単数で、複数のフィード(またはそれが呼び出されたもの)です。あなたは私のルートがあまりにもthoと命名されていることを明確にすることで正しいです。あなたがこの新しい情報に基づいてアイデアを持っていれば、感謝します。ありがとう! –

+0

あなたはUserモデルとAccountモデルを持っていますか?またはそれらは同じものですか? – mylescarrick

+0

ユーザーモデルのみ。私はAuthLogicチュートリアルからルートをコピーした...私はそれの背後にある理由は、ユーザーがログインしている場合、それらは単一のリソースのように扱っていると思う...彼らはちょうど1つの "アカウント"(これは本当にただ編集している自分のユーザーモデル)。管理者がすべてのユーザーのリストを見ることができるので、管理者は通常の「ユーザー」ルートを使用するかもしれませんが、とにかく、良い理由があれば私は結婚しません。ちょっとだけ簡単な方法があるはずですこのような状況であっても、ルートを使用することができます。再度、感謝します! –

5

私は何がやりたいことは、次にPOSTでaccount_feeds_pathを使用するようになりますのform_for

<% form_for [:account, @feed] do |f| %> 

だと思います@feedが新しいレコードで、@feedが新しいレコードでないときにPUTを持つaccount_feed_pa​​th(@feed)。

関連する問題