1

我的第一个 Rails 应用程序有以下问题

首先,我使用 Scaffolding 生成一个 Patient 实体。但是,我希望Patient添加表单在我的主页中可见,它由控制器PagesController及其操作控制HomePatient我只是在我的主页中以添加的形式呈现了部分视图。

在我提交表单后,如果添加成功,它将正常工作。但是,如果验证失败,它会将我带到患者/新用户(而不是我的主页),显示表单错误。发生这种情况是因为 PatientController 中的这段代码

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 新手,所以我也不确定我的架构是否正确。

4

1 回答 1

0

如果您的 routes.rb 显示

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

那么你可以写

format.html { render pages_home_path }

于 2013-02-13T19:59:37.887 回答