Могут ли "локальные жители" использоваться с "коллекцией" при рендеринге партией в Rails?

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

= render :partial => "/shared/enquiry/car_type", :collection => @enquiry.available_car_types

Однако, если я также хочу передать переменную (в этом случае "путь", потому что я разделяю это частичное через две формы), путь недоступен мне:

= render :partial => "/shared/enquiry/car_type", :collection => @enquiry.available_car_types, :locals => {:path => customers_enquiry_path}

Я пробовал перемещать вещи, но ничего не работает, и я полагаю, что нельзя использовать локальных жителей с коллекциями. Любая помощь будет оценена.

Гав

Ответы

Ответ 1

Нет, вы не можете использовать их вместе. Ref this

Я думаю, вам нужно сделать что-то вроде следующего

  <% for ad in @enquiry.available_car_types %>
    <%= render :partial => "/shared/enquiry/car_type", :locals =>{ :ad => ad, :path =>customers_enquiry_path } %>
  <% end %>

Ответ 2

Как сказано в руководствах, укажите опцию :as при вызове частичного

enter image description here

Ответ 3

Для Rails 4.x, если вы передаете коллекцию непосредственно в визуализацию (которую вы должны делать, если хотите использовать автоматический частичный выбор для гетерогенной коллекции), следующий параметр интерпретируется как хэш локалей.

Попробуйте следующее:

= render @enquiry.available_car_types, :path => customers_enquiry_path

Ответ 4

Какую версию вы используете? Используя мой 2.3.5, я могу сделать именно это:

render :partial => "/site_articles/article", :collection => @site_articles, :locals => { :footer => true }

который вы можете найти в других местах, таких как 3.4.6 this.

Ответ 5

@Gav, вы сталкиваетесь с двумя проблемами.

  • render игнорирует параметр locals при передаче коллекции в качестве первого параметра. Вам нужно вместо этого указать параметры параметра partial и collection, как это было в вашем втором примере.

  • path, вероятно, попадает в область зарезервированного слова. Попробуйте использовать что-то еще.