我正在从头开始构建一个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"
疑难解答
首先,我想重定向回我所在的同一页面,其中包含http://localhost:3000/stories?id=example-post-slug
之类的网址。我认为路由错误很奇怪,因为它不应该根据我的控制器代码返回?
我还认为我的routes.rb
文件可能存在问题,但我已将其作为资源添加,如其他答案所示:
的routes.rb
Rails.application.routes.draw do
resources :posts
resources :comments
get "stories" => "stories#index", as: :stories
....
end
因此,我很困惑。为什么在定义create方法时出现路由问题,将Comments
表添加为资源,并且我在控制器中选择了重定向?