2012-02-29 10 views
1

[OK]を持っている場合はRubyが確認し、これは愚かな質問のように聞こえるかもしれないが、私はそれで問題のすべての種類を持っていると私はこれを行うには簡単方法がなければならないと確信している:変数は長さ

変数に長さがある場合、どのようにルビをチェックインしますか?

私は@dvds.length?を使用している場合、それは長さを持っていないときに私はエラーundefined method length for ...を取得します。

は基本的に私はほとんどのActiveRecordを取得し、いくつかの検索を持っている:関係を、彼らはIDで検索するので1または2には、単に一つのエントリを返します。私は次のようなものを持っています:

@total = @dvds.length 

私たちが見つけた数を表示します。

@dvdsは、任意の長さが含まれていない場合は、私は未定義のメソッドのエラーを取得します。私は次のようなことをしました:

if @dvds.class == 'ActiveRecord:Relation' 

これは恐ろしいものです。

は、変数はそれはたくさんのきれいなしに容易である長さを有しているか否かをチェックするRubyの道があるように持っていますか?

理想的には私のようなものを探しています:

@total = @dvds.length if @dvds.length 

または類似。

ありがとうございました。

+0

私は求めることができますが、なぜ '@ dvds'には' length'がないのですか? 'dvds'という名前の変数は、配列かActiveRecordスコープ(配列のように振る舞う)のいずれかでなければなりません。上記の質問からコピー –

+0

@MatthewRudy、:* *しかし、彼らはIDで検索以来、1または2は、単に一つのエントリを返す:)この問題を回避するには、私は以来、代わりに配列を返しますどの '.where'を使用するように変更しました。しかし、アレックスの対応は大きな助けになります。 – kakubei

+0

@dvdsが常に複数形であることを知るように、検索を変更してコレクションをすべて返すようにするか、少なくとも呼び出しをラップします。 '@dvds = [Dvd.find_by_id(1)]' – DGM

答えて

3

あなたは、オブジェクトがObject#respond_to?メソッド使用して、指定されたメソッドに応答するかどうかを確認することができます。

obj.respond_to? :length # true or false 
+0

Wonderful、これは私が探していたものです。ありがとうございました! – kakubei

関連する問題