2012-05-29 2 views
0

В моей Business модели, когда я пытаюсь создать бизнес и возникает ошибка, я заметил, после POST он избавляется от моего shared/page_header парциальное:Как сохранить частичную страницу на одной странице после ошибок формы?

def page_title 
    "#{@page_title}" 
end 

<% unless @page_title.blank? %> 
<div class="row"> 
    <div class="page-header span12"> 
     <h1><%= @page_title %></h1> 
    </div> 
</div> 
<% end %> 

def new 
    @business = Business.new 
    @page_title = "Add Business" 
end 

def create 
    @business = Business.new(params[:business]) 
    if @business.save 
    redirect_to :back, :notice => "This Business was successfully added." 
    else 
    render :new, :notice => "It seems there was an error. Please try again." 
    end 
end 

Теперь я замечаю я начинаю на /businesses/new но после POST он идет до /businesses. Кто-то сказал мне, что это нормально, но я до сих пор не видел такого поведения. Если это помогает, действия new и create являются единственными в моем Business ресурсе. Что я могу сделать, чтобы это работало?

ответ

2

Просто добавьте @page_title = "Добавить бизнес" в свой метод создания. «render: new» отображает новый шаблон, но не выполняет новый метод.

Использование рендера с: действие является частым источником путаницы для новичков Rails. Указанное действие используется для определения вида представления для рендеринга, но Rails не запускает какой-либо код для этого действия в контроллере. Любые переменные экземпляра, которые вам нужны в представлении, должны быть настроены в текущем действии перед вызовом рендеринга. от http://guides.rubyonrails.org/layouts_and_rendering.html#using-render

+0

Woah, достаточно прост. Я не знал, что такие действия, как 'create', могут быть использованы таким образом. Я буду помнить об этом. Спасибо. – LearningRoR