Как передать коллекцию из родительского фрагмента в произвольную субчастичную глубину? - PullRequest
0 голосов
/ 17 марта 2012

Я следую RailsTutorial, и в настоящее время я застрял на упражнении 10.5.5 . Поскольку я немного меняюсь, я поместил код в paste (обновлено).

Есть несколько вещей, на которые следует обратить внимание, прежде чем перейти к вставке:

  1. Один из исходных частичных атрибутов получает коллекцию от своего «родительского», а другой получает объект непосредственно от контроллера.
  2. Оператор if в обоих этих "дочерних" частичках использует другое имя объекта, но они представляют один и тот же объект в базе данных.

В идеале, я бы хотел переместить оператор if в внука, или суб-суб-, частичный. Я могу оставить его в ребенке частично, если это будет необходимо, но это не СУХОЙ.

Я пытался отрисовать парчальный внук с помощью <%= render partial: 'shared/foo', object: bar, as: :baz %>, чтобы я мог использовать baz в парциальном внуке, так как другой дочерний партиал по умолчанию использует baz. В этой части я просто делаю <%= render partial: 'shared/foo', object: baz %>. Смущенный? Я тоже.

Вы заметите, что я пытался рендерить партиалы как с родительским объектом, так и без него. Может быть, родительский объект нужно переопределить? Я тоже только что попробовал <%= render partial: 'shared/micropost_delete_link', object: feed_item %>, но не повезло.

Каждый подход, который я пробовал до сих пор, приводит к одной и той же ошибке в тестах:

 Failure/Error: before { visit root_path }
 ActionView::Template::Error:
   undefined method `user' for :feed_item:Symbol

Это указывает на то, что я не могу передать один объект, полученный от родительской опции collection: @feed_items.

Обновление: В моей оригинальной пасте была опечатка. После исправления в обновленной пасте мои тесты по-прежнему не проходят.

 Failure/Error: before { visit root_path }
 ActionView::Template::Error:
   undefined method `user' for nil:NilClass

1 Ответ

1 голос
/ 17 марта 2012

Где-то вдоль линии, я попробовал другой синтаксис, и тесты начали проходить:

<%= render partial: 'shared/micropost_delete_link', locals: { micropost: feed_item } %>

Даже если документы говорят, что следующее должно быть эквивалентно:

<%= render :partial => "account", :object => @buyer, :as => 'user' %>
<%= render :partial => "account", :locals => { :user => @buyer } %>

Тестирование все еще немного необычно для меня, поэтому я не могу исключить, что оно заставило что-то в наборе быть переоценено.

...