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

#ruby-on-rails #ruby-on-rails-3.1 #actioncontroller

#ruby-on-rails #ruby-on-rails-3.1 #actioncontroller

Вопрос:

У меня есть сообщение 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 в своем контроллере действие, которое работает. В моем новом .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.2.3 Rendering an Action’s Template from Another Controller

Попробуй:

  render "shows/new", :layout => false
 

Комментарии:

1. Интересно, как я это пропустил? Спасибо — на полпути! Теперь у меня есть странность, когда он отображает правильный шаблон, но не правильную «_form» в этом шаблоне. Это не рендеринг «shows / _form» в «shows / new»

2. хорошо, это потому, что контроллер по-прежнему плохой, вы должны указать абсолютный путь при рендеринге вашего частичного

3. Вы имеете в 2.2.4 Rendering an Arbitrary File виду ?

4. нет, я говорю о частичных представлениях, так что 3.4.1 Naming Partials

5. Хорошо, shows > new.html.erb теперь у меня <%= render 'shows/form' %> есть. Теперь я получаю ошибку 500.