Вложенный маршрут Rails для единственного ресурса - PullRequest
5 голосов
/ 21 июля 2009

У меня есть вложенный маршрут на единственном ресурсе

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>

Полагаю, это связано с переименованием его из "users" в "account"? Поэтому я попытался

<% 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| %>

Это действительно лучший способ? Другими словами, нет ли способа использовать именованные маршруты в этой ситуации?

Ответы [ 2 ]

6 голосов
/ 29 октября 2009

Я думаю, что вы хотите сделать

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

form_for будет искать использование account_feeds_path с POST, когда @feed является новой записью, и account_feed_path (@feed) с PUT, когда @feed не является новой записью.

1 голос
/ 21 июля 2009

Я думаю, вы запутались здесь во вложенных (+ именованных) маршрутах и ​​единичных ресурсах. Я предполагаю, что вы пытаетесь создать единственный feed ресурс, который принадлежит пользователю (учетной записи), верно?

Если это так, ваши существующие маршруты

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

должно быть

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

Обратите внимание, что accounts - это множественные ресурсы, но фид единственного числа. Это дает вам обычные маршруты RESTful для ваших учетных записей (т. Е. Ваших пользователей) ... но особый ресурс "подачи". Вам не нужно ссылаться на идентификатор вашего канала - но обычно вы просто работаете с @ account.feed

используйте rake routes, чтобы показать вам полный список маршрутов, которые он создает.

account_feed_path(@account), например, даст вам страницу Показать для канала.

Таким образом, пути дают вам возможность использовать помощников по форме следующим образом:

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

<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...