2012-01-18 4 views
1

新しいアイテムを既存のアイテムに基づいて追加する機能を追加したいと考えています。新しい項目はすべての古い項目のタスクを持つはずですが、特定の項目をリセットする必要があります。新しいモデルオブジェクトを古いモデルオブジェクトに基づいて作成する方法、特定のフィールドのカスタマイズを許可する方法

モデルクラスメソッド私は作品の下に(def self.copy(item))を追加しましたが、アイテムを正確に複製するためのセットアップだけです。いくつかのフィールドをクローンし、ユーザーが残りのデータを入力できるようにしたい。

たとえば、アイテムをコピーするとその番号もコピーされますが、ユーザーに一意の番号を入力する機会を与えたいのですが、どうすればいいですか?

理想的には、アイテムコントローラの新しいアクションにコピー機能を統合して、ユーザーが新しいアイテムを作成するたびに、そのアイテムを現在のアイテムに置き換える機会が与えられるようにしたいと思います。データベース。これは理にかなっていますか?

class Task < ActiveRecord::Base 
    belongs_to :department 
    belongs_to :item 
    belongs_to :customer 
end 

class Item < ActiveRecord::Base 
has_many :tasks 

    def self.copy(item) 
    newitem = item.clone 
    newitem.tasks << item.tasks.map(&:clone) 
    return newitem 
    end 
end 
+0

「いくつかのフィールド」はいつも同じになるでしょうか? – Eric

+0

はい、毎回同じです。 – FellyTone84

答えて

4

フィールド 'item_number'を除くすべてを含む新しいアイテムが作成されます。

def self.copy(old_item)  
    Item.new(old_item.attributes.merge({:item_number => nil})) 
end 
+0

ありがとう、これは役に立ちます。ユーザーがcustom:item_numberに入力できるようにする方法を提案しますか? – FellyTone84

+0

これはコントローラーに入りますか?どうすればこれにリンクできますか? – oobie11

関連する問題