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