view_context больше не доступен в Rails 3 views?

#ruby-on-rails-3 #jquery #ruby-on-rails-3.1

#ruby-on-rails-3 #jquery #ruby-on-rails-3.1

Вопрос:

в моем текущем приложении Rails 3.0.9 у меня было несколько шаблонов .js.erb, в которых использовался view_context, поэтому я мог вызывать fields_for для него во время запроса ajax. Это позволяло мне создавать некоторые вложенные поля формы атрибутов через ajax. Но после обновления до Rails 3.1 я получаю следующую ошибку:

ActionView::Template::Ошибка (неопределенная локальная переменная или метод `view_context’ для #<#:0x1057b9f70>):

Было ли это удалено / устарело недавно? Есть ли другой способ, которым я могу создавать вложенные fields_for для входных данных без использования родительского FormBuilder? Кажется, view_context все еще доступен в контроллере, но я надеялся сохранить эту генерацию разметки на уровне представления.

Мой шаблон .js.erb выглядел так

 <% meal_item_fields = view_context.fields_for :meal_items, Meal.new.meal_items.new, :child_index => "new_meal_items" do |f|
               render :partial => 'meal_items/meal_item_fields', :locals => {:meal_item_form => f}
             end
%>

$("#meal-items").append("<%= escape_javascript(meal_item_fields) %>");
  

Ответ №1:

Согласно документам api, он устарел в >= 3. Источник 3.0.9 вернул self для view_context. Я думаю, если бы вы попробовали без view_context, это просто сработало бы.

 <% meal_item_fields = fields_for :meal_items, Meal.new.meal_items.new, :child_index => "new_meal_items" do |f|
                   render :partial => 'meal_items/meal_item_fields', :locals => {:meal_item_form => f}
                 end %>
    $("#meal-items").append("<%= escape_javascript(meal_item_fields) %>");
  

Ответ №2:

Возможно, вы захотите добавить helper_method :view_context свой контроллер.