Указание имени рельса, частичного для рендеринга с использованием переменной - PullRequest
2 голосов
/ 21 июля 2011

Возможно ли в Rails 3.0 визуализировать партиал, где имя партиала хранится в переменной?

Я пытаюсь сделать что-то похожее на:

<%= escape_javascript(raw render :partial => @partial_name, :locals => { :value => @value} )%>

Обновлено с более подробной информацией

В моем приложении у меня есть набор моделей, использующих наследование нескольких таблиц, например, допустим, у меня есть базовая модель 'cupcake' и варианты, такие как 'AwesomeCupcake' и 'AlrightCupcake'.

Каждая из этих моделей имеет свой собственный частичный элемент для отображения информации и использует схему именования: «_awesome_cupcake» и «_alright_cupcake».

На странице у меня есть ссылки на каждый тип кексов, в котором я хочу, чтобы контроллер принимал параметр и динамически выводил, какую часть визуализировать. Следующее работает как хотелось бы, если (в файле new.js.erb) я заменяю '@partial_name' чем-то вроде 'awesome_cupcake'.

Вот еще немного информации о том, как расположены мои компоненты:

application.js

$('#set_cupcake').click(function () {
   $.getScript('/cupcakes/new.js?cupcake_type=awesome');
});

cupcakes_controller.rb

def new
   cupcake_type = "#{params[:cupcake_type].capitalize}Cupcake"

   if Object.const_defined? cupcake_type
     @cupcake = cupcake_type.constantize.new
     @partial_name = "#{params[:cupcake_type]}_cupcake"
   end
end

Вид / кексы / new.js.erb

$('#cupcakes')
  .append("<%= escape_javascript(raw render :partial => @partial_name, :locals => { :cupcake => @cupcake } ) %>")

Ответы [ 3 ]

1 голос
/ 22 июля 2011

Итак, я наконец понял, в чем проблема. В моем контроллере я устанавливал @partial_name в рамках условия, которое проверяло, существует ли конкретная модель.

Я не понял, что с помощью Object.const_defined? на самом деле не работает для рельсов в режиме разработки, так как модели изначально не все загружены. Альтернативный подход, который я нашел, заключается в поиске в списке соединений с таблицами базы данных с использованием ActiveRecord :: Base.connection.tables.

Однако я думаю, что лучшее решение - это сохранить файл, который «регистрирует» приемлемые значения для этого параметра.

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

Конечно. Убедитесь, что @partial_variable является строкой имени (например, "header", и она будет работать нормально.

0 голосов
/ 21 июля 2011

Если это не работает, можете ли вы показать нам, что именно содержит @partial_name? Какую ошибку вы получаете?

Удостоверьтесь, что ведущий знак подчеркивания не указан, а также расширение файла.

Например: для рендеринга '_myPartial.html.erb', @partial_name должно быть "myPartial".

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