Рендеринг Rails частичное представление (с проблемами чтения Rails API) - PullRequest
1 голос
/ 02 ноября 2011

У меня есть сообщение 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

По какой-то причине он не будет отображать шаблон "показывает / новый". Он продолжает отображать шаблон 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'

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

1 Ответ

2 голосов
/ 02 ноября 2011

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

Попробуйте:

 render "shows/new", :layout => false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...