#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.