少し混乱するものがあります。私はいくつかの問題を引き起こすので、少し明確にしてください。デリゲートを持つ仮想属性のself、self [:item]の相違点
私は、その都市の木の量を指定するwood_production属性への代理人を持つ都市モデルを持っています。私は通常、city.wood行うことができるようにしたかった
has_one :wood_production, :autosave => true
delegate :amount, :to => :wood_production, :prefix => true, :allow_nil => true
def wood
wood_production_amount
end
def wood= amt
self[:wood_production_amount] = amt
end
- = 1000、市を通じてその値を保存し、しかし、私はこれを所業あらゆる種類の問題に来ている:ようなものです。私の仮想属性を正しく設定していないようです。
だから私は実際にこれらの違いは何です、お願いしたいと思います:
def wood
self.wood_production_amount
end
def wood
wood_production_amount
end
def wood
self[:wood_production_amount]
end
と本当に正しく状況に対処するために何を使用する必要がありますか?
EDIT:
私が好きセッターを作成する場合:
def wood= amt
self.wood_production_amount = amt
end
私が手:
1.9.2p290 :003 > c.wood -= 1000
=> 58195.895014789254
1.9.2p290 :004 > c.save
(0.1ms) BEGIN
(0.3ms) UPDATE `wood_productions` SET `amount` = 58195.895014789254, `updated_at` = '2012-01-24 02:13:00' WHERE `wood_productions`.`id` = 1
(2.0ms) COMMIT
=> true
1.9.2p290 :005 > c.wood
=> 66522.63434300483 ???????
BUFセッターがある場合:
最初に答えるdef wood= amt
wood_production_amount = amt
end
1.9.2p290 :004 > c.wood -= 1000
=> 58194.823000923556
1.9.2p290 :005 > c.save
(0.1ms) BEGIN
(0.2ms) COMMIT
=> true
素敵な説明ありがとうを:)、でも委任セッターを設定した後、これは新しいを保存しません:それはあなたのために働いていなかった理由は、あなたにもsetterメソッド
:amount=
を委任されていないことかもしれません値:active_city.wood - = 1000 active_city.save(0.1ms)BEGIN (0.3ms)UPDATE 'cities' SET' updated_at' = '2012-01-24 02:08:57'都市' .'id' = 1 (44.1ms)COMMIT。なぜどんなアイデア?私の質問を説明するために編集する – Spyrosあなたはsetterメソッド 'wood =(value)'を持っていますか? –
はい、それは私の質問の最初のコード部分です。/ – Spyros