0

実験目的で、次のコマンドを Rails コンソールに入力しました。任意のアイテムを照会し、category_id を割り当てて「保存」を呼び出しました。結果が何も変わっていないのはなぜですか (項目のcategory_id はまだ null です)。

(わかりやすくするために一部の出力は省略されています)

1.9.3-p327 :004 > i = Item.first
Item Load (0.2ms)  SELECT "items".* FROM "items" LIMIT 1
1.9.3-p327 :005 > i.category_id =1
1.9.3-p327 :006 > i.save
(0.1ms)  begin transaction
(0.1ms)  commit transaction
=> true 
1.9.3-p327 :007 > i
=> #<Item id: 1, title: "near", price: 1000.0, photos: nil, created_at: "2013-07-31 15:19:24", updated_at: "2013-07-31 15:51:46", user_id: nil, category_id: nil, location_id: 1> 

update_attributes も試しました

1.9.3-p327 :008 > i.update_attributes(:category_id => 1)
   (0.1ms)  begin transaction
   (0.1ms)  commit transaction
=> true 
1.9.3-p327 :009 > i
=> #<Item id: 1, title: "near", price: 1000.0, photos: nil, created_at: "2013-07-31 15:19:24", updated_at: "2013-07-31 15:51:46", user_id: nil, category_id: nil, location_id: 1> 

- - - - - - - - - - - - - - - - - - - - - - - - 編集 - ---------------------------

1.9.3-p327 :007 > i.price=50
 => 50 
1.9.3-p327 :008 > i.save
   (0.1ms)  begin transaction
   (0.3ms)  UPDATE "items" SET "price" = 50.0, "updated_at" = '2013-07-31 21:28:33.643283' WHERE "items"."id" = 1
   (229.6ms)  commit transaction
 => true 

別の属性「価格」で試してみてください。うまくいきます。つまり、レールは、おそらく外部キーを保護するために、「_id」で終わる属性を手動で変更することを防ぎますか?

誰でもこれを確認できますか?またはこれを再現しますか?

------------------------------------再編集------------ --------------------- 付属モデル

class Item < ActiveRecord::Base
  attr_accessible :photos, :price, :title, :user_id, :category_id
  attr_accessor :user_id, :category_id
  belongs_to :user
  belongs_to :category
  belongs_to :location


end
4

1 に答える 1