かなりの属性を含むオブジェクト「デバイス」があります。デバイスの 1 つを編集するときに、コピー ボタンを押すと新しいデバイスが作成され、その「編集ページ」が読み込まれ、古いデバイス パラメータが text_field に入力されるようにしたいと考えています。しかし、ボタンを使用してアクション制御メソッドを呼び出す方法について非常に混乱しており、現在、次のエラーが表示されています
"一致するルートがありません {:action="clone", :controller="device", :id="1"}"
「クローン」メソッドの呼び出しを機能させることができれば、私は良い状態になると思います。どんな助けでも大歓迎です!私の現在のコードは次のとおりです。
edit.html.erb
<div class="row">
<%= form_for(@device) do |f| %>
<div class="span3 offset0">
<%= f.label "Unit Name" %>
<%= f.text_field :unitName %>
.
.
.
<%= f.label "Router Terminal Server IP" %>
<%= f.text_field :routerTerminalServerIp %>
</div>
<div class="span3 offset0">
<%= f.label "N2x Server" %>
<%= f.text_field :n2xServer %>
.
.
.
<%= f.label "Last Changed On" %>
<%= f.text_field :updated_at %>
<%= f.label "Update, Copy, or Delete Device" %>
<%= f.submit "Update", class: "btn btn-medium btn-info" %>
<%= link_to "Clone", :controller => "device", :action => "clone" %>
<%= link_to "Delete", device_path, class: "btn btn-medium btn-danger" %>
</div>
<% end %>
</div>
ルート.rb
App::Application.routes.draw do
resources :devices
root 'static_pages#home'
match 'devices/clone', to: 'devices#clone', via: 'get'
end
devices_controller.rb
class DevicesController < ApplicationController
def new
@device = Device.new
end
def clone
oldDevice = Device.find(params[:id])
@device = Device.new
@device = @oldDevice.dup
@device.save
redirect_to edit_device_path(@device.id)
end
def create
@device = Device.new(device_params)
@device.lastChangedBy = request.remote_ip
if @device.save
redirect_to edit_device_path(@device.id)
else
render 'new'
end
end
def show
@device = Device.find(params[:id])
end
def edit
@device = Device.find(params[:id])
end
def update
@device = Device.find(params[:id])
@device.lastChangedBy = request.remote_ip
if @device.update_attributes(device_params)
redirect_to edit_device_path(@device)
else
render "edit"
end
def destroy
Device.find(params[:id]).destroy
redirect_to root_url
end
end
private
def device_params
params.require(:device).permit(:unitName, ...., :owner)
end
end