コントローラーのチェックでif o.my_method('a')
が正しく評価されますが、これが起きたときには@var
はモデルにnilのままです。どこが間違っているのですか、それとももっと良い方法がありますか?Rubyコントローラを使用したモデルでインスタンス変数の値を設定する
コントローラー:
def action
o = Object.new
if o.my_method('a')
...
end
end
モデル:あなたが持っていた
class MyModel
attr_accessor :example
VALID_VALUES = %w[ a b c ]
def demo_method(value)
@example = true if VALID_VALUES.include?(value)
end
end
model = MyModel.new
model.demo_method('x')
model.example
# => nil
model.demo_method('a')
model.example
# => true
問題:
ここclass Object
def my_method(args)
['a', 'b', 'c'].any? do |i|
@var = true if args.include?(i)
end
end
def my_method2
if @var == true
do stuff
end
end
end
なぜオブジェクトを 'Object'に追加していますか?それは通常、非常に危険であり、不十分である。また、 "モデル"を意味しますか? "Modal"は特定の専門用語です – tadman
はい、申し訳ありませんがモデルを意味します。私はこれを行うための別の方法はわかりません。モデルは 'my_method'について知る必要はありませんが、コントローラですべてのことをすれば、結果を知るためにモデル(' my_method2')が必要ですモデルの中で実行されたかどうか、そのチェックの(真偽)です。 @ tadman –