Рендеринг частичного представления Rails (с проблемами чтения Rails API)

У меня есть сообщение jQuery, отправляющее форму в действие контроллера create, которое отлично работает. Если save был успешным, я бы хотел, чтобы действие create возвращало другую форму, поэтому обратный вызов success вставит эту форму. Это возможно?

Вот мой код:

def create
    @event = Event.new(params[:event])

      if @event.save
        # This is where I would like to render a different controller action's view.
        render :controller => "shows", :action => "new", :layout => false
      else
        render action: "new"
      end
  end

По какой-то причине он не будет отображать шаблон «shows/new». Он продолжает отображать шаблон new текущего контроллера без макета. Что мне здесь не хватает?

Кроме того, я заглянул на api.rubyonrails.org и попытался найти метод render. Я нашел его в списке как render(context,options), но не могу узнать, какие есть допустимые варианты. Кажется, это общий шаблон для многих методов. Как мне узнать? Это, безусловно, поможет мне понять, какие у меня есть варианты, и, возможно, попробовать разные вещи.

Спасибо, Дэни.

ДОБАВЛЕНО: теперь я использовал render "shows/new", :layout => false в своем действии контроллера, которое работает. В моем файле new.html.erb для шоу я объявил <%= render "/shows/form" %>. К сожалению, теперь я получаю 500 ошибку. Я нашел это в development.log:

ActionView::Template::Error (undefined method `model_name' for NilClass:Class):
    1: <%= form_for(@show) do |f| %>
    2:   <% if @show.errors.any? %>
    3:     <div id="error_explanation">
    4:       <h2><%= pluralize(@show.errors.count, "error") %> prohibited this show from being saved:</h2>
  app/views/shows/_form.html.erb:1:in `_app_views_shows__form_html_erb___1397093944823648986_2158339140'
  app/views/shows/new.html.erb:3:in `_app_views_shows_new_html_erb__1152608637968596369_2158584080'
  app/controllers/events_controller.rb:61:in `create'

Я не совсем уверен, что вызывает это...


person codedog    schedule 01.11.2011    source источник


Ответы (1)


Кажется, вы пропустили: 2.2.3 Rendering an Action’s Template from Another Controller

Пытаться:

 render "shows/new", :layout => false
person apneadiving    schedule 01.11.2011
comment
Интересно, как я это пропустил. Спасибо - полпути! Теперь у меня есть странность, когда он отображает правильный шаблон, но не правильную _form в этом шаблоне. Он не отображает шоу/_form в шоу/новых - person codedog; 02.11.2011
comment
хорошо, потому что контроллер все еще плохой, вы должны указать абсолютный путь в рендеринге вашего частичного - person apneadiving; 02.11.2011
comment
Вы имеете в виду 2.2.4 Rendering an Arbitrary File? - person codedog; 02.11.2011
comment
нет, я говорю о частичных представлениях, поэтому 3.4.1 Naming Partials - person apneadiving; 02.11.2011
comment
Хорошо, в shows > new.html.erb теперь у меня есть <%= render 'shows/form' %>. Теперь я получаю 500 ошибку. - person codedog; 02.11.2011
comment
Это становится лучше, теперь он нацелен на правильную _form. Однако я все еще застрял - я отредактировал вопрос, включив в него ошибку. Спасибо за всю вашу помощь до сих пор, я получаю очень близко. - person codedog; 02.11.2011
comment
давайте продолжим это обсуждение в чате - person apneadiving; 02.11.2011