我想尝试两种不同的编辑操作:
edit
)editclean
)如何使用其他方法渲染编辑操作?
我的courses_controller.rb
:
class CoursesController < ApplicationController
before_action :set_course, only: [:show, :edit, :update, :destroy]
def new
@course = Course.new
end
def edit # <<<< edit nested
@course.events.build
end
def editclean # <<<< edit only course
end
def create
@course = Course.new(course_params)
respond_to do |format|
if @course.save
format.html { redirect_to @course }
else
format.html { render :new }
end
end
end
def update
respond_to do |format|
if @course.update(course_params)
format.html { redirect_to @course }
else
format.html { render :edit }
end
end
end
private
def set_course
@course = Course.find(params[:id])
end
def course_params
params.require(:course).permit(:name, events_attributes: [:id, :starts_at])
end
end
答案 0 :(得分:1)
几个选项:
edit2
)和新路由。edit
操作的代码以运行新代码。params[:edit_type].eql?("edit2")
并从原始def edit2
操作中调用新的编辑逻辑(即application_controller
中定义的edit
)。 答案 1 :(得分:1)
您可以进行一些简单的更改。首先,在routes.rb
文件中,您需要添加新路由。最简单的方法是:
resources :courses do
member do
get "editclean"
end
end
这将添加&#34; editclean&#34;在您的控制器中路由和自动editclean
操作。
在控制器中,您可以向before_action处理程序添加editclean
操作:
before_action :set_course, only: [:show, :edit, :editclean, :update, :destroy]
您还必须创建视图文件editclean.html.erb
。您的edit
操作可能与_form.html.erb
操作共享new
部分操作。您可以向此部分添加条件,也可以将相关位复制到新视图文件。这是您的新视图的样子:
<h2>Edit (clean) Course</h2>
<%= form_for @course do |f| %>
<%= f.label :title, "Title" %>
<%= f.text_field :title %>
<%= f.label :start_date, "Start Date" %>
<%= f.text_field :start_date %>
<%= f.label :end_date, "End Date" %>
<%= f.text_field :end_date %>
<%= f.submit "Save" %>
<% end %>
请注意,这将重复使用现有的update
操作来保存字段。如果您需要特殊行为(避免某些数据检查),您可能希望实施替代操作,但基本update
操作通常与预期完全一致。
当您链接到此时,您可以使用为您自动创建的路径助手,如下所示:
<%= link_to "Edit (clean)", editclean_course_path(@course) %>
关于添加新动作的所有内容。