Ruby on rails rails中的dup或克隆操作

Ruby on rails rails中的dup或克隆操作,ruby-on-rails,controller,clone,dup,Ruby On Rails,Controller,Clone,Dup,好吧,我要澄清我在做什么 class DuplicatesController < ApplicationController before_action :set_venue, only: [:new] def new end def create if @venue.duplicate(venue_params) flash[:success] = t('controller.create.success',

好吧,我要澄清我在做什么

class DuplicatesController < ApplicationController
  before_action :set_venue, only: [:new]

  def new
  end

  def create
    if @venue.duplicate(venue_params)
      flash[:success] = t('controller.create.success',
                          resource: Venue.model_name.human)
      redirect_to admin_venue_url @venue
    else
      flash[:warning] = @venue.errors.full_messages.to_sentence
      render :new
    end
  end

  private
  def set_venue
    @venue = Venue.friendly.find params[:venue_id]
  end
end

def venue_params
  params.require(:venue).permit(:name,
                                :address,
                                :address_complement,
                                :city,
                                :phone)
end
结束

我怎样才能调用我的复制控制器中的那些参数,谢谢 在创建dup后,我需要设置属性,因为我想用新信息保存一个新记录,但我不知道如何使用我的方法,有人可以解释我
谢谢。

最好的方法可能是只传递原始型号的id/slug

然后,您的副本_controller.rb可以类似于以下内容:

class DuplicatesController < ApplicationController
  def create
    old_venue = Venue.friendly.find(params[:id])
    venue = old_venue.dup
    venue.attributes = venue_params
    if venue.save
      # success render
    else
      # error render
    end
  end

  private 

  def venue_params
    params.require(:venue).permit(:permitted_attributes) # id should not be there
  end
end

请你澄清你的问题或补充更多细节好吗?您是否正在尝试创建一个单独的控制器,该控制器的操作与VenueController完全相同?您无法将参数从一个控制器传递到另一个控制器,参数是从HTTP请求中提取的。谢谢,是的,现在我在一个模型场馆中执行此操作。def duplicate(params)new_venue=self.dup new_venue.attribute=params new_venue.save end,但在控制器中我调用方法。从一个变量复制谢谢,但我只想从venue传递一些参数,我从我的venue.model得到一个验证,该名称是唯一性的。然后在我创建.dup并存储在新变量中后,我需要设置新属性,我该怎么做。谢谢,@DonPaulie现在当我尝试分配venue.attributes=venue_参数时,对于#我总是有相同的错误未定义的局部变量或方法'vention_params',你的意思是?地点路径表示未定义方法地点参数。确保第一个代码块的最后几行在那里。
class DuplicatesController < ApplicationController
  def create
    old_venue = Venue.friendly.find(params[:id])
    venue = old_venue.dup
    venue.attributes = venue_params
    if venue.save
      # success render
    else
      # error render
    end
  end

  private 

  def venue_params
    params.require(:venue).permit(:permitted_attributes) # id should not be there
  end
end
if copy_from_id = params[:copy_from_id]
  @copy_source = Venue.find_by(id: copy_from_id)
  @venue = @copy_source.dup
  @venue.attributes = venue_params
else
  @venue = Venue.new
end

if @resource.save
  ...
else
  ...
end