3

アプリケーションで Rails のリソースを複製しようとしていますが、いくつかの問題が発生していました。

セットアップは次のとおりです。ユーザーが使用できる「アイテムテンプレート」のライブラリがあり、結果のアイテムを変更します。現在、次のようなセットアップがあります。

@temp_item = @template_item.dup
@new_item = @user.items.create(@temp_item.attributes)

ただし、保護された属性 (つまり、created_at と updated_at) もコピーしようとしているという問題が発生しています。各属性を個別にリストしたくないので、私の質問は、このインスタンスでコピーされている属性を除外する方法はありますか?

ありがとう。

4

3 に答える 3

7

ミーシャの良い提案を元の回答に組み込みます。

@temp_item_attributes = @template_item.attributes.reject{ |k,v|
  %w(created_at updated_at).include?(k)
}
@new_item = @user.items.create(@temp_item_attributes)
于 2012-05-16T03:44:50.633 に答える
4

を使用する点でマークに同意しますが、 /rejectを使用する代わりに、次のようにします。casewhen

@template_item.attributes.reject{ |k,v| %w(created_at updated_at).include?(k) }
于 2012-05-16T04:06:02.963 に答える
2

Mark Paine と Mischa の回答を組み合わせて実行する必要があるように思えます。

temp_item_attributes = @template_item.attributes.reject do |k,v|
  %w(created_at updated_at).include?(k)
end
@new_item = @user.items.create(temp_item_attributes)

この動作に便利なメソッドがないとは信じられません。一生懸命探したわけではありませんが、見つかりませんでした。

于 2012-05-16T04:47:58.310 に答える