【问题标题】:Edit form in rails - No route matches [PUT]在 rails 中编辑表单 - 没有路线匹配 [PUT]
【发布时间】:2021-01-31 19:36:47
【问题描述】:

我有一个创建任务的表单。

控制器:

class ProjectsController < ApplicationController
  before_action :authenticate_user!

  def index
    @projects = Project.where(user_id: current_user.id)
  end

  def new
    @project = Project.new
  end

  def create
    @project = Project.new
    @project.title = project_params[:title]
    @project.user_id = current_user.id

    if @project.save
      redirect_to root_url
    else
      flash[:error] = @project.errors.to_a
      render :new
    end
  end

  def destroy
    @project = current_user.projects.find_by(params[:id])

    flash[:error] = @project.errors.to_a unless @project.destroy

    redirect_to root_url
  end

  def edit
    @project = current_user.projects.find_by(params[:id])
    render :edit
  end



  def update
  end  

  private

  def project_params
    params.require(:project).permit(:title)
  end
end

我的路线:

Rails.application.routes.draw do
  devise_for :users
  resources :projects
  root 'projects#index'
end

new.html.haml

.create_project_form
    = form_with model: @project, url: "/projects", method: :post do |form|
        = form.text_field :title, { placeholder: 'New Project' }
        = form.submit 'Create project'

我可以创建任务,但我不能更新它。

edit.html.haml

.edit_project_form
    = form_with model: @project, url: "/projects", method: :put do |form|
        = form.text_field :title, { placeholder: 'Edit' }
        = form.submit 'Update project'

当我提交表单时,出现错误 - No route matches [PUT] "/projects"

据我所知,我必须在某处传递一个 id

= form_with model: @project, url: "/projects", method: :put do |form|

但我找不到合适的方法来做到这一点 请帮忙

【问题讨论】:

    标签: ruby-on-rails ruby forms haml


    【解决方案1】:

    您的编辑表单提交到错误的路径。在 Rails 中,您通过向成员路由 /projects/:id 发送 PATCH 请求来更新资源。 Rails 不再使用 PUT to PATCH back in 2012,但由于遗留原因仍会生成 PUT 路由。

    您甚至不需要首先在此处显式提供路径和方法。而是使用约定而不是配置 Rails 样式:

    # app/views/projects/_form.html.rev
    = form_with(model: @project) 
      #...
    

    Rails 会通过检查记录是否已保存来找出正确的路线和方法。

    还有use a partial,而不是在新视图和编辑视图中重复相同的表单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 2017-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多