[英]Rails: Unknown action The action 'update' could not be found for OtherController
[英]Rails 'update' action not found
我有以下UsersController,当我执行“编辑”操作时,我可以编辑数据并单击“提交”按钮。 单击提交按钮后,出现以下错误。
The action 'update' could not be found for UsersController
我不明白为什么它甚至试图首先执行“更新”动作。 有人可以指出我正确的方向吗?
UsersController
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.create!(user_params)
redirect_to users_path, notice: "Successfully created #{@user.name}"
end
def index
@user = User.find(session[:user_id])
if @user == current_user
render :index
else
redirect_to new_session_path, notice: "You need to login first to view schedules."
end
end
def edit
@user = User.find(params[:id])
if @user == current_user
render :edit
else
redirect_to users_path, notice: "You do not have permission to edit #{@user.name}'s profile."
end
end
private
def user_params
params.require(:user).permit!
end
end
这是我的编辑视图和表单-助手视图。 编辑:
<div class="page-header">
<div class="row">
<h1 class="col-sm-8" style="margin-left: 10px"><%= link_to @user.name, edit_user_path(@user) %></h1>
<div class="col-sm-3">
<span style="margin-right: 20px"><%= link_to 'Logout', 'logout', class: 'btn btn-default pull-right' %></span>
<span style="margin-right: 20px"><%= link_to 'Home', users_path, class: 'btn btn-default pull-right' %></span>
<span style="margin-right: 20px"><%= link_to 'My Studio', studios_path, class: 'btn btn-default pull-right' %></span>
</div>
</div>
</div>
<%= render partial: 'form', locals: {submit_copy: 'Edit this user'} %>
_形成:
<div class="row col-sm-6" style="margin-left: 30px;">
<%= form_for @user do |f| %>
<div class="form-group">
<%= f.label :email %>
<%= f.text_field :email, class: 'form-control' %>
</div>
<div class="form-group">
<%= f.label :name %>
<%= f.text_field :name, class: 'form-control' %>
</div>
<div class="form-group">
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>
</div>
<div class="form-group">
<%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation, class: 'form-control' %>
</div>
<div class="form-group">
<%= f.label 'Select Your Studio' %> or <%= link_to 'Add Your Studio', new_studio_path %>
<%= f.collection_select :studio_id, Studio.all, :id, :name, {}, {class: 'form-control'} %>
</div>
<div class="form-group">
<%= f.label :role, 'Role' %>
<%= f.text_field :role, class: 'form-control' %>
</div>
<div class="form-group">
<%= f.label :image_url, 'Image URL' %>
<%= f.text_field :image_url, class: 'form-control' %>
</div>
<%= f.submit submit_copy, class: 'btn btn-primary' %>
or
<%= link_to 'Cancel', new_session_path %>
<% end %>
</div>
您应该阅读一些rails基本文档,尤其是REST的rails说明。
按照惯例
GET
访问) PUT
访问) 因此,在您的情况下,表单是通过edit
方法呈现的,然后提交会将您发送到update
操作。
这意味着您也必须实现它。
由于您将@user
作为form_for
的参数传递,Rails将调用#persisted?
在@user
,可能有两个结果:
true
,则表示它是一个正在更新的现有对象,并且该表单将提交给#update
操作。 false
,则表示它是一个新对象,该表单将提交给#create
操作。 如果您对Rails如何执行这些检查感到好奇,可以查看源代码中的ActionView模块:
更具体地说,在行号1810:
key = object ? (object.persisted? ? :update : :create) : :submit
当您传递给form_for帮助器的对象已经保留时,它将创建一个具有以下属性的表单来更新该对象。
<form action="/users/:id" method="post">
假设您的route.rb文件中具有默认路由
resources :users
这将生成多个静态路由,其中之一是用于更新资源的路由。
PATCH/PUT /users/:id users#update
然后,您提交表单,将使用表单数据向/ users /:id发出发布请求,并且该请求将被路由以更新UsersController的操作。
您应该将更新方法添加到控制器,然后将已编辑的对象保存在那里。
您可以在此处了解有关Rails路由的更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.