在Ruby on Rails中,编辑和更新操作通常涉及以下步骤:
首先,你需要创建一个表单,允许用户编辑现有的记录。通常,这个表单会放在对应的视图文件中,例如 edit.html.erb
。
<!-- app/views/your_model/edit.html.erb -->
<h1>Edit <%= @your_model.name %></h1>
<%= form_with(model: @your_model, local: true) do |form| %>
<% if @your_model.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@your_model.errors.count, "error") %> prohibited this <%= @your_model.class.name.downcase %> from being saved:</h2>
<ul>
<% @your_model.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= form.label :attribute_name %>
<%= form.text_field :attribute_name %>
</div>
<!-- Add other fields as needed -->
<div class="actions">
<%= form.submit %>
</div>
<% end %>
确保你的路由配置允许编辑和更新操作。通常,这些操作会映射到 edit
和 update
动作。
# config/routes.rb
Rails.application.routes.draw do
resources :your_model
end
这将自动为你生成以下路由:
GET /your_model/:id/edit
-> YourModelController#edit
PATCH/PUT /your_model/:id
-> YourModelController#update
在你的控制器中,实现 edit
和 update
动作。
# app/controllers/your_model_controller.rb
class YourModelController < ApplicationController
before_action :set_your_model, only: [:edit, :update]
# GET /your_model/:id/edit
def edit
# 这里通常不需要额外的逻辑,因为实例变量 @your_model 已经通过 before_action 设置好了
end
# PATCH/PUT /your_model/:id
def update
if @your_model.update(your_model_params)
redirect_to @your_model, notice: 'Your model was successfully updated.'
else
render :edit
end
end
private
def set_your_model
@your_model = YourModel.find(params[:id])
end
def your_model_params
params.require(:your_model).permit(:attribute_name, :other_attribute)
end
end
在 update
动作中,使用 strong parameters
来安全地处理传入的参数。这有助于防止恶意用户注入不安全的字段。
def your_model_params
params.require(:your_model).permit(:attribute_name, :other_attribute)
end
确保你的编辑和更新功能通过测试。你可以使用 Rails 的内置测试工具来编写集成测试或控制器测试。
# test/controllers/your_model_controller_test.rb
require 'test_helper'
class YourModelControllerTest < ActionDispatch::IntegrationTest
setup do
@your_model = your_models(:one)
end
test "should get edit" do
get edit_your_model_url(@your_model)
assert_response :success
end
test "should update your_model" do
patch your_model_url(@your_model), params: { your_model: { attribute_name: 'New Value' } }
assert_redirected_to your_model_url(@your_model.reload)
follow_redirect!
assert_select "h1", "Edit YourModel"
end
end
通过以上步骤,你应该能够在 Ruby on Rails 中成功实现编辑和更新操作。记得根据你的具体需求调整代码。
领取专属 10元无门槛券
手把手带您无忧上云