Как избежать тоста, если уже показан один тост

Тревис R правильный. (Хотелось бы, чтобы я мог упрекнуть тебя.) Я только что занялся этим. С помощью этих маршрутов:

resources :articles do
  resources :comments
end

Вы получаете пути, такие как:

/articles/42
/articles/42/comments/99

, направляемые на контроллеры в

app/controllers/articles_controller.rb
app/controllers/comments_controller.rb

так же, как говорится в http://guides.rubyonrails.org/routing.html#nested-resources , без специальных пространств имен.

Но частичные и формы становятся сложными. Обратите внимание на квадратные скобки:

<%= form_for [@article, @comment] do |f| %>

Самое главное, если вы хотите URI, вам может понадобиться что-то вроде этого:

article_comment_path(@article, @comment)

Альтернативно:

[@article, @comment]

, как описано в http://edgeguides.rubyonrails.org/routing.html#creating-paths-and-urls-from-objects

Например, внутри сборники, частичные с comment_item, предоставленные для итерации,

<%= link_to "delete", article_comment_path(@article, comment_item),
      :method => :delete, :confirm => "Really?" %>

. Что говорит jamuraa, может работать в контексте статьи, но это не сработало для меня различными способами.

Существует много обсуждений, связанных с вложенными ресурсами, например http://weblog.jamisbuck.org/2007/2/5/nesting-resources

Интересно, что я только что узнал, что блок-тесты большинства людей фактически не проверяют все пути , Когда люди следуют предложению Jamisbuck, у них есть два способа получить доступ к вложенным ресурсам. Их модульные тесты обычно получаются / публикуются до самых простых:

# POST /comments
post :create, :comment => {:article_id=>42, ...}

. Чтобы проверить маршрут, который они могут предпочесть, они должны сделать это следующим образом:

# POST /articles/42/comments
post :create, :article_id => 42, :comment => {...}

Я узнал об этом, потому что мои модульные тесты начали сбой, когда я переключился с этого:

resources :comments
resources :articles do
  resources :comments
end

на это:

resources :comments, :only => [:destroy, :show, :edit, :update]
resources :articles do
  resources :comments, :only => [:create, :index, :new]
end

Я думаю, это нормально, чтобы иметь повторяющиеся маршруты, и пропустить несколько модульных тестов. (Почему тест? Потому что, даже если пользователь никогда не видит дубликаты, ваши формы могут ссылаться на них либо неявно, либо через именованные маршруты.) Тем не менее, чтобы свести к минимуму ненужное дублирование, я рекомендую следующее:

resources :comments
resources :articles do
  resources :comments, :only => [:create, :index, :new]
end

Извините за длинный ответ. Думаю, мало кто знает о тонкостях.

36
задан Sufian 23 July 2014 в 07:03
поделиться