Ruby on rails Rails复制按钮错误
我有一个包含大量属性的对象“设备”。当编辑其中一个设备时,我希望有一个复制按钮,当按下该按钮时,将创建一个新设备并加载其“编辑页面”,将旧设备参数填充到文本_字段中。但是我对如何用按钮调用动作控制方法感到非常困惑,我现在得到一个错误提示 没有与{:action=>“clone”,:controller=>“device”,:id=>“1”}匹配的路由 如果我能让“克隆”方法发挥作用,那么我想我的状态会很好。任何帮助都将不胜感激!我目前的代码如下: edit.html.erbRuby on rails Rails复制按钮错误,ruby-on-rails,ruby,methods,ruby-on-rails-4,link-to,Ruby On Rails,Ruby,Methods,Ruby On Rails 4,Link To,我有一个包含大量属性的对象“设备”。当编辑其中一个设备时,我希望有一个复制按钮,当按下该按钮时,将创建一个新设备并加载其“编辑页面”,将旧设备参数填充到文本_字段中。但是我对如何用按钮调用动作控制方法感到非常困惑,我现在得到一个错误提示 没有与{:action=>“clone”,:controller=>“device”,:id=>“1”}匹配的路由 如果我能让“克隆”方法发挥作用,那么我想我的状态会很好。任何帮助都将不胜感激!我目前的代码如下: edit.html.erb <div cl
<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>
设备\u控制器.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
class DeviceController
您应该这样指定路线:
resources :devices do
member do
get :clone
end
end
然后您可以使用clone\u device\u path(id)
helper
此外,您应该考虑使用POST方法来执行此操作,使用Button而不是Link。
< P>如果您命名控制器方法“克隆”,您将没有任何模糊的问题,如Ruby On对象中定义的:它过去在ActiveRecord中被重写,但最近ActiveRecord使用#dup来实现此功能。您仍然可以在路由和链接标签中使用“克隆”,但在控制器中的实际方法中使用其他方法;例如,如果您调用方法“my\u clone”,您可能希望在路由中使用“:as=>”my\u clone“”选项。如何设置按钮以使用克隆设计路径(id)助手?类似于
。我不想一直为此打扰你,但我仍然无法让克隆按钮正常工作。现在,克隆按钮的功能与“编辑”按钮完全相同。我尝试用“克隆”方法删除所有内容,只让它“重定向”到根url“但它只刷新了编辑页面。它似乎没有正确调用该方法。请尝试在该方法中添加类似raise“foo”
的内容,并检查是否有任何内容。我将其从“button\u to”更改为“link\u to”,这使我进入了该方法!!将其保留为button_to不会引发错误,但使用link_会在raise“foo”行引发运行时错误。没有它,点击克隆按钮后,“无法复制NilClass。”
resources :devices do
member do
get :clone
end
end