1

Model.createメソッドを実行するときに、:idに値を指定すると、後で無効になります。例:

Model.create (
  :id => 50,
  :name => Joe,
  :enabled => yes
)

代わりに、.newを使用してクラス変数に格納し、クラス変数を介してID値を格納してから、最後にsaveを呼び出す必要があります。

m = Model.new (
  :name => Joe,
  :enabled => yes
)

m.id = 50
m.save

このコードをseeds.rbで実行しようとしていますが、これはあまりDRYコードではありません。どうすればこれをより良くして同じ結果を達成できますか?

4

2 に答える 2

2

idはattr_protectedです。これを防ぐために、デフォルトの保護された属性のリストをオーバーライドできます。属性情報が外部から取得される可能性がある場所では、これを行うように注意してください。idフィールドは、理由によりデフォルトで保護されています。

class Model < ActiveRecord::Base
   private
   def attributes_protected_by_default
      []
   end
end

または@Leoの回答で行く

于 2012-06-28T14:34:31.313 に答える
1

これはあなたのための答えかもしれません。Model.createは基本的にModel.newの後にModel.saveが続きます。IDを変更して再度保存するので、次のようにすることもできます。

m = Model.new { 
  :name => Joe,
  :enabled => yes
}
m.id = 50
m.save!

これにより、2回の保存を行う必要がなくなります。

于 2012-06-28T14:28:58.337 に答える