2013-02-13 36 views
1

我与我的第一Rails应用程序渲染在形式(验证)在误差不同的控制器的视图,而carring验证消息

以下问题首先,我使用脚手架以生成病人实体。 但是,我希望Patient添加表单在我的主页中可见,该主页由控制器PagesController及其操作Home控制。我只是在我的主页上添加了Patient的部分视图。

我提交表单后,如果添加成功,它就会按照它的原样工作。但是,如果验证失败,它会让我到患者/新(不是我的主页),显示表单错误。出现这种情况的,因为这个代码在PatientsController

if @patient.save 
    format.html { redirect_to @patient, notice: 'Patient was successfully created.' } 
    format.json { render json: @patient, status: :created, location: @patient } 
    else 
    format.html { render action "new" } 
    format.json { render json: @patient.errors, status: :unprocessable_entity } 

取而代之的是我想,在错误的情况下,它应该让我回到主页(其中提交表单)显示错误。我试着做以下几点:

format.html { render :controller => "pages", :action => "home" } 

,但我得到这个错误

Missing template patients/home, application/home with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in: * "/Users/xhorxhi91/Sites/dentarails/app/views" 

我也试过这样:

format.html { render 'pages/home' } 

这个只调用视图,而不是方法Home所以任何物体在该方法中创建的内容不会被重新创建。此外,错误不会被执行。我知道我可以从我的方法重新创建对象,但我知道这是不好的做法。

另外我知道我不能使用redirect_to方法,因为错误消息不会被携带。

有什么建议吗?我是Ruby的新手,所以我不确定我的架构是否正确。

回答

0

如果你的routes.rb显示

match 'pages/home' => "pages#home", as: "pages_home"

,那么你可以写

format.html { render pages_home_path }

+0

因为它是一个渲染方法,它不会调用的方法 '家' 的'页面的控制器,但只是渲染视图。但是,我有几个变量,我在Pages#home中初始化并在该视图中使用。这就是为什么这不适合我 – interboy 2013-02-16 01:55:03