【问题标题】:Duplicate two linked models Ruby复制两个链接模型Ruby
【发布时间】:2018-01-25 09:58:18
【问题描述】:

我想复制我的模型“公式”和“问题”。他们有一个 has_may/belongs_to 关系。 我能够复制第一个模型,但在 FormulairesController#duplicate 中有一个“NoMethodError” 当我复制第二个时,未定义方法 `save' for #"

我的模型:

公式.rb

class Question < ActiveRecord::Base
 belongs_to :formulaire
 validates :nom, presence: true
end

问题.rb

class Formulaire < ActiveRecord::Base
 has_many :questions, dependent: :destroy
end

formulaire_controller.rb

def duplicate
 template = Formulaire.find(params[:id])
 @formulaire= template.dup
 @formulaire.save

 #for question in @formulaire.questions
 #  question.dup
 #  question.save
 #end

 template2 = Question.where(formulaire_id: 47)
 @question = template2.dup
 @question.save
 redirect_to @formulaire, notice: "Formulaire dupliqué"
end

def formulaire_params
      params.require(:formulaire).permit(:name, :description, 
              questions_attributes: [:id, :nom, :typequestion, :image, '_destroy', photos_attributes:[:id],
                  answers_attributes:[:id, :content,'_destroy']]) if params[:formulaire]

      #puts YAML::dump params
end

我的看法

公式/show.html.erb

    <li class="Dupliquer"><%= link_to 'Dupliquer', duplicate_formulaire_path(@formulaire)  %> </li>

routes.rb

 resources :formulaires do
   member do
     get 'duplicate'
   end
 end

谢谢

【问题讨论】:

  • 尝试 template2 = Question.find_by(formulaire_id: 47) 或 template2 = Question.where(formulaire_id: 47).first
  • find_by 不起作用我有一个错误,不能将 dup 用于 Nil::Class。
  • 第二种方法复制了第一个模型,但没有复制第二个
  • can't use dup for a Nil::Class 表示找不到记录,请仔细检查记录是否存在。

标签: ruby-on-rails


【解决方案1】:

在stackoverflow中,我在这里找到了它:

如果你想复制一个 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

这里有什么:Rails clone copy or duplicate

我从未使用过这颗宝石,但它就是为了这个,我会把它留在那里,你会看到你想要什么。

https://github.com/amoeba-rb/amoeba

还有在reddit上

 def clone
    @location = Location.find(params[:id]).dup
    ............
    render :new
end

链接:https://www.reddit.com/r/rails/comments/6phfy4/form_how_to_implement_a_clone_action/

【讨论】:

  • 我试过了,但它只克隆了第一个模型,而不是模型问题
猜你喜欢
  • 2015-01-24
  • 1970-01-01
  • 2020-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多