。这是因为Rails框架的默认行为是使用HTTP的POST方法来提交表单数据,而POST方法会创建一个新的资源。
在Rails中,表单的提交通常会触发控制器中的一个动作(Action)。这个动作会接收表单数据,并根据数据创建一个新的数据库记录。这意味着每次提交表单时,都会创建一个新的元素。
如果想要更新选定的元素而不是创建新元素,可以使用Rails的资源路由(Resourceful Routing)和HTTP的PUT或PATCH方法。资源路由可以将请求映射到不同的动作,例如更新(update)动作。通过使用PUT或PATCH方法提交表单数据,可以告诉Rails框架执行更新操作而不是创建新元素。
以下是一个示例代码,演示如何在Rails中更新选定的元素:
# routes.rb
resources :elements
# elements_controller.rb
class ElementsController < ApplicationController
def edit
@element = Element.find(params[:id])
end
def update
@element = Element.find(params[:id])
if @element.update(element_params)
redirect_to @element, notice: 'Element was successfully updated.'
else
render :edit
end
end
private
def element_params
params.require(:element).permit(:name, :description)
end
end
# edit.html.erb
<%= form_for @element do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :description %>
<%= f.text_area :description %>
<%= f.submit 'Update Element' %>
<% end %>
在上述示例中,我们使用了资源路由来定义元素的CRUD操作。在编辑动作(edit action)中,我们通过Element.find(params[:id])
找到要编辑的元素。在更新动作(update action)中,我们使用@element.update(element_params)
来更新元素的属性。
这样,当我们提交编辑表单时,会执行更新操作而不是创建新元素。
推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云数据库(TencentDB)。腾讯云云服务器提供可扩展的计算能力,适用于部署Rails应用程序。腾讯云数据库提供可靠的数据库服务,适用于存储和管理Rails应用程序的数据。
腾讯云云服务器产品介绍链接地址:https://cloud.tencent.com/product/cvm 腾讯云数据库产品介绍链接地址:https://cloud.tencent.com/product/cdb
领取专属 10元无门槛券
手把手带您无忧上云