将表单保存到数据库后导致Rails中的Redirect_to(:back)导致路由错误

时间:2016-07-22 07:03:00

标签: ruby-on-rails

我正在从头开始构建一个Rails(第一次没有使用Scaffold)做一件简单的事情:向数据库提交用户名和帖子。

为此,在我的Stories Controller中,我设置了一个创建方法:

class StoriesController < ApplicationController

  def index
    @posts = Post.where(slug: params[:id]).all
  end

  def create
    @comments = Comment.new(params[:comments])
    @comments.save
    redirect_to(:back)
  end
end 

然后,在我看来,我的故事视图中有这个表格:

<%= form_for :comments do |f| %>
  <div class="form-group">
    <div class="field">
      <%= f.label :username %><br>
      <%= f.text_field :username, class: "form-control" %>
    </div>
  </div>

  <div class="form-group">
    <div class="field">
      <%= f.label :post %><br>
      <%= f.text_area :post, class: "form-control" %>
    </div>
  </div>

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

奇怪的是,当我点击保存时,它无法保存到表并且出现路由错误:

  

No route matches [POST] "/stories"

疑难解答

  1. 首先,我想重定向回我所在的同一页面,其中包含http://localhost:3000/stories?id=example-post-slug之类的网址。我认为路由错误很奇怪,因为它不应该根据我的控制器代码返回?

  2. 我还认为我的routes.rb文件可能存在问题,但我已将其作为资源添加,如其他答案所示:

  3. 的routes.rb

    Rails.application.routes.draw do
      resources :posts
      resources :comments
      get "stories" => "stories#index", as: :stories
      ....
    end
    

    因此,我很困惑。为什么在定义create方法时出现路由问题,将Comments表添加为资源,并且我在控制器中选择了重定向?

0 个答案:

没有答案