2010-11-22 2 views
0

発行したが、私はどちらかを見つけ出すように見えることはできません:私はTestCaseクラスという名前のモデルを持っている)奇妙なと一貫性のないモデルは、私は両方の状況ではなく、重要な何かが欠けてるように私は感じ

1 -

class TestCase < ActiveRecord::Base 
    belongs_to :test_suite 
    scope :queued, lambda { where("test_cases.suite_id IS NOT NULL") } 
    scope :assigned_to, lambda { |sid| where(:suite_id => sid) } 
end 

コントローラーは、コントローラーと完全に連携できます。ビューまたはビューヘルパー(TestCase.allなど)で情報を表示しようとすると、NoMethodError (undefined method 'all')と表示されます。これを::TestCase.allと呼ぶと、それが機能します。私はそれが別のモデル(belongs_to ...)に関連付けられているという事実と関係があるという理論を持っていましたが、私はそれを確認するための何かを見つけることができません、なぜそれが起こるのか教えてください。

2)別のプロジェクトでは、Artworkという名前の別のモデルがあります。再び、それには関連があります(belongs_to)。この場合、私はビュー内でそれを正常にアクセスすることができ、動的メソッド呼び出しをしようとする場合を除いて、コントローラ内のすべてのメソッドは正常に動作します。私NoMethodErrorを与える

@artwork = Artwork.find(params[:id]) 
value = params[:value].to_sym 
@artwork.update_attributes(value => [email protected](value).call) 

- この場合、私はのためのシンプルなトグルを持っています。しかし、 - if @artwork.respond_to?(value)を追加すると、期待どおりに動作します。再び、私は理由を理解できません。

上記の方法を使用して作業すると、どちらも重要なことがあります。

+0

コードを4つ分スペースでインデントしてください。読めるのが難しいコードは、質問に対する回答が少なくなるという意味です。 – jergason

答えて

0

Re:問題1 - モデルを "TestCase"と呼んではいけません。これはRails TestCaseクラスと衝突します。

Re:問題2 - これは奇妙なことです。

@artwork.send(value) 

を使用して動作させることもできますが、不正なユーザーがフォームを通じて任意のメソッド名を渡して、大混乱を招く可能性があることに注意してください。

+0

最初の問題は、ええ、私は目が見えません。それを指摘してくれてありがとう。 2つ目は...アクセッサメソッドが最初に呼び出されるまで(メソッドが見つからないために)アクセサメソッドが構築されていないためだと言われました。実行中のコールはそれをヒットしないため、動作しません。不正なユーザーは...良い点です。ありがとう! –

関連する問題