1

jobplanコントローラーにコードがあります。のコピーを作成していjobtasksます。

これはコードです:

@jobplan.jobtasks.each do |jobtask|
  @jobtask = Jobtask.where("id = ?", jobtask)
  @task = Task.create(@jobtask.attributes)
end

質問1:

jobtask新しい から属性を除外する方法はありtaskますか?

質問2:

taskにない固定属性を新しいものに追加するのはどうですかjobtask

ご協力いただきありがとうございます!

4

2 に答える 2

4

次のようにできます。

@jobplan.jobtasks.each do |jobtask|
  jobtask_attrs = jobtask.attributes
  jobtask_attrs.delete(:some_attribute) # Question 1
  jobtask_attrs.merge!({ additionnal_attribute: "Hello world!" }) # Question 2
  Task.create(jobtask_attrs)
end

注意:id属性を削除したい属性である場合、心配する必要はありません。ActiveRecord は、新しいレコードを作成するときにそれを無視します ; )

私はあなたのコードをより効率的で読みやすいものにリファクタリングしました。必要に応じて気軽に質問してください;-)

リファクタリング:

  • @jobplan.jobtasksJobtaskthis に属するオブジェクトをすでに返すJobplan必要があるため、DB に別のクエリを実行して再度検索する必要はありません
  • 共有変数@taskは、配列の各ループで書き換えられ、最終的に共有変数@tasksを作成し、作成されたタスクで埋めます。
于 2013-11-12T20:43:00.333 に答える