ruby-on-rails - 嵌套控制器中的 Rails 6 Dup
问题描述
我有一个嵌套在我的站点控制器下的系统控制器。我想 .dup 一个系统,但我收到“找不到没有 ID 的系统”错误。
我的按钮看起来像这样
<%= link_to 'Duplicate System', site_system_path(@site, item.system), action: "duplicate", class: "dropdown-item" %>
我的控制器
class Sites::SystemsController < ApplicationController
before_action :set_system, only: [:show, :edit, :update, :destroy]
before_action :set_site
def new
@system = System.new
end
def duplicate
@site = Site.find(params[:site_id])
@system = System.find(params[:system_id]).dup
render :new
end
def create
@system = System.new(system_params)
@system.site = @site
if @system.save
render json: @system
else
render json: {errors: @site.errors.full_messages}
puts @site.errors.full_messages
end
end
# PATCH/PUT /systems/1
# PATCH/PUT /systems/1.json
def update
respond_to do |format|
if @system.update(system_params)
format.html { redirect_to site_systems_path(@site), notice: 'System was successfully updated.' }
format.json { render :show, status: :ok, location: @system }
else
format.html { render :edit }
format.json { render json: @system.errors, status: :unprocessable_entity }
end
end
end
# DELETE /systems/1
# DELETE /systems/1.json
def destroy
@system.destroy
respond_to do |format|
format.html { redirect_to site_systems_path(@site), notice: 'System was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_system
@system = System.find(params[:id])
end
def set_site
@site = Site.find(params[:site_id])
end
# Only allow a list of trusted parameters through.
def system_params
params.require(:system).permit(:name, :site_id, :systemtype)
end
end
我的路线
Rails.application.routes.draw do
resources :sites do
resources :systems, controller: 'sites/systems'
get 'duplicate_system', to: 'sites/systems#duplicate'
end
authenticate :user, lambda { |u| u.admin? } do
mount Sidekiq::Web => '/sidekiq'
end
resources :notifications, only: [:index]
resources :announcements, only: [:index]
devise_for :users, controllers: { omniauth_callbacks: "users/omniauth_callbacks",
registrations: 'users/registrations' }
root to: 'accounts#index'
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end
我按照这个问题Duplicate an entry in Rails from show page来构建我的按钮和方法在非嵌套控制器上对其进行了测试,效果很好。
我想我只是在寻找如何将网站传递给组合:)
我尝试了一些东西,似乎没有达到目标,在此先感谢。
解决方案
resources :sites do
resources :systems, controller: 'sites/systems' do
get :duplicate
end
end
<%= link_to 'Duplicate System',
site_system_duplicate_path(@site, item.system),
class: "dropdown-item"
%>
推荐阅读
- javascript - 在 Forge Viewer 中加载多个模型时出现内存不足错误
- android - AWS Kinesis Video Streaming 与 Android 应用程序上的 AWS Rekognition
- javascript - 正则表达式:如何限制字母数字字段中的最大整数数
- apache-flink - 在 Flink 中,我可以在同一个 slot 中拥有一个 operator 的多个子任务吗?
- c - C中的布尔数组和按位运算
- python - Cuda 计算能力 3.0。所需的最低 Cuda 能力为 3.7
- python - 无法从 trivago.com 获取酒店定价详情
- string - 无法将类型“IO String”与“[Char]”匹配
- php - 基于日期时间差异的单独组数组
- python - 在语音识别中解码 utf8 错误回溯