得到一个"没有路线匹配[PATCH]" /posts.1""在编辑视图

时间:2015-11-05 12:08:56

标签: ruby-on-rails ruby

我正在关注ruby的教程,它基本完成但是在编辑时 它会打开页面进行编辑,但是当我点击按钮保存它时,给定一个No路由匹配[PATCH]" /posts.1"

我的编辑视图:

<h1>Editing post</h1>

<%= form_for :posts, url: posts_path(@posts), method: :patch do |f| %>

  <% if @posts.errors.any? %>
    <div id="error_explanation">
      <h2>
        <%= pluralize(@posts.errors.count, "error") %> prohibited
        this post from being saved:
      </h2>
      <ul>
        <% @posts.errors.full_messages.each do |msg| %>
          <li><%= msg %></li>
        <% end %>
      </ul>
    </div>
  <% end %>

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

  <p>
    <%= f.label :description %><br>
    <%= f.text_area :description %>
  </p>

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

<% end %>

<%= link_to 'Back', posts_path %> 

我的控制器:

class PostsController < ApplicationController
  def index
    @posts = Post.all
  end

  def edit
    @posts = Post.find(params[:id])
  end

  def update
  @posts = Post.find(params[:id])

  if @posts.update(posts_params)
    redirect_to @posts
  else
    render 'edit'
  end
end

  def new
    @posts = Post.new
  end

  def create
      @posts = Post.new(posts_params)
    if @posts.save
        redirect_to @posts
    else
        render 'new'
    end
  end

  def show
    @posts = Post.find(params[:id])
  end

  private
  def posts_params
    params.require(:posts).permit(:title, :description)
  end


end

我似乎无法找到问题所在,有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您无需指定方法,因为如果@posts是新对象,则rails form_tag会根据对象@posts调用路由,然后调用create action,但在您的情况下@posts存在于您的数据库中,因此它调用了更新操作。同样在您的路线中,您需要指定resources :posts

<%= form_for(@posts)  do |f| %>

答案 1 :(得分:0)

您可以尝试将表单标记更改为:

<%= form_for(@posts), method: :patch  do |f| %>