Fat*_*yan 11 clone copy ruby-on-rails duplicates
我有一个嵌套的表单,一旦我保存,我希望能够单击显示页面上的链接来复制或克隆该表单并打开一个新表单.从那里我应该能够进行编辑(比如新的id)并保存为新记录.我见过一些像deep_cloneable gem这样的例子,但我不知道如何实现它.我认为这应该很简单,但我只是不明白把东西放在控制器和show视图中的位置.
Nar*_*iya 20
如果要复制activeRecord对象,可以使用其属性创建新的对象
您可以在控制器中执行一个可以在链接上调用的操作,
def create_from_existing
@existing_post = Post.find(params[:id])
#create new object with attributes of existing record
@post = Post.new(@existing_post.attributes)
render "your_post_form"
end
Run Code Online (Sandbox Code Playgroud)
Pat*_*ick 19
我发现这些答案有点难以理解.一个答案显示:
@post = Post.new(@existing_post.attributes)
Run Code Online (Sandbox Code Playgroud)
这将无法工作,因为它也将传递id和时间戳值.我使用.dup来修复它,我在答案中表明了这一点.
以下是我从现有项目中创建新项目的方法.
该模型适用于Product,控制器Products_Controller.rb.我们将向控制器添加一个名为COPY的新动作,我们将从现有产品的SHOW视图链接到它,并渲染一个已填充的新视图,可以进行编辑和保存.
首先,我们在routes.rb中为复制操作创建一个路由
resources :Products do
member do
get 'copy'
end
end
Run Code Online (Sandbox Code Playgroud)
然后在Products_controller.rb中进行复制操作
def copy
@source = Product.find(params[:id])
@product = @source.dup
render 'new'
end
Run Code Online (Sandbox Code Playgroud)
现在我们需要在SHOW视图中添加一个Link来调用我们的复制操作.
<%= link_to "copy", copy_product_path(params[:id]) %>
Run Code Online (Sandbox Code Playgroud)
这对我有用.我希望它适合你,答案很简单,可以遵循.
| 归档时间: |
|
| 查看次数: |
14423 次 |
| 最近记录: |