Rails路由错误

时间:2014-10-13 23:13:35

标签: ruby-on-rails

我正在尝试一个基本的Rails应用程序,我的应用程序不断给我一个错误,上面写着:

No route matches [POST] "/slides/new"

我无法弄清楚如何让这个工作。这是我想要实现的表单:

<%= form_for :slide do |f| %>
    <p>
        <%= f.label :title %><br>
        <%= f.text_field :title %>
    </p>

    <p>
        <%= f.label :picture %><br>
        <%= f.file_field :picture %>
    </p>

    <p>
        <%= f.label :user %><br>
        <%= f.text_field :user %><br>
    </p>

    <p>
        <%= f.submit %>
    </p>

<%end%>

为了更好的衡量,这是我的路线文件:

Rails.application.routes.draw do
  get 'welcome/index'
  resources :slides
  resources :entries
  root 'welcome#index'
end

我已经尝试按照教程的步骤做一些不同的事情,但是在尝试将我学到的东西应用到不同的应用程序的某个地方,我一定错过了一些东西,但我无法弄清楚它会是什么。任何见解都会非常感激。

2 个答案:

答案 0 :(得分:0)

只是一个猜测,但你可能想要

form_for @slide do |f|

而不是

form_for :slide do |f|

前者将为实例对象生成路由,而后者则尝试为符号生成路由(不确定预期的行为是什么)。

为实例对象生成时,form_for会检查它是否为new_record?。如果是,则为/create创建路线。如果不是,则会转到/update。无论哪种方式,POST/new都没有多大意义,因为/new通常是GET请求。

答案 1 :(得分:0)

由于某种原因,form_for帮助程序无法为:幻灯片符号创建正确的路径。您可以手动指定路径:

<%= form_for :slide, url: {controller: "slides", action: "create"} do |f| %>

或者使用@slide实例变量(您应该在控制器中分配此变量)而不是:幻灯片符号