Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails复制按钮错误_Ruby On Rails_Ruby_Methods_Ruby On Rails 4_Link To - Fatal编程技术网

Ruby on rails Rails复制按钮错误

Ruby 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

我有一个包含大量属性的对象“设备”。当编辑其中一个设备时,我希望有一个复制按钮,当按下该按钮时,将创建一个新设备并加载其“编辑页面”,将旧设备参数填充到文本_字段中。但是我对如何用按钮调用动作控制方法感到非常困惑,我现在得到一个错误提示

没有与{: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>
设备\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