2012-01-10 2 views
0

私はレコードからIDを取得したいと思います。私が書くときRails find method

この:

@ticket.table = Table.find(:all, :conditions => {:train => @ticket.train, :datestart => @ticket.selldate}) 

私はそれがレコードの量を返すとします。

お願いします。

UPD: 私は出力を持っている:

=> [#<Table id: 6, train: 1, time: "12-00", datestart: "2012-01-10", created_at: 
"2012-01-10 01:59:29", updated_at: "2012-01-10 01:59:29">] 

表IDは、私はそれを取得する必要が6です。

+0

(1)取得する出力と(2)期待する出力を含める必要があります。あなたは何の出力も含んでいません - どのように間違っているのかを知るにはどうすればいいですか?この特定の問題については、 'Table'クラスのモデル定義も参照する必要があります。 – jefflunt

答えて

2

idは、そのオブジェクトの単なるプロパティです。単純に呼び出す:

> @ticket.table.id 
=> 6 

TableクラスがActiveRecord::Baseのサブクラスである、このタイプのすべてのオブジェクトは、あなただけの.id

であなたが抱えている問題を参照することができid属性を持つべきであると仮定すると、上記の例では.find(:all, ...)を使用しています。常には、レコードが1つしか見つからない場合でもオブジェクトのコレクションを返します。これは、1つの要素しか含まない配列を取得する原因となります。したがって

、いずれか一つだけの行を返す、または単に次の方法のいずれかを介してアレイ内の最初の要素を参照するために、.find(:first, ...)又は​​を使用:

> @ticket.table.first.id 
=> 6 

又は

> @ticket.table[0].id 
=> 6 
+0

お返事ありがとうございます。しかし、この配列にはメソッドIDはありません(!!!)。私はすでにその方法を試みました。 – evilgeniuz

+0

ああ!私はそれが最初に私がそれを読んだときに配列だったことを忘れてしまった。私は私の答えを更新しました。 – jefflunt

+0

ありがとう!あなたは既に1つの運命を救っています。 – evilgeniuz

2
@ticket.table = Table.find(:all, :conditions => {:train => @ticket.train, :datestart => @ticket.selldate}).map(&:id) 

は、すべての条件を満たすIDの配列を提供します。あなたが1つのIDだけを望むなら、以下のコードを使用してください。

@ticket.table = Table.find(:all, :conditions => {:train => @ticket.train, :datestart => @ticket.selldate}).map(&:id).first 

これが役に立ちます。

+0

これは私にとってより良いことです。どうもありがとう! – evilgeniuz

+0

mapの代わりにcollectメソッドを使うことができます。私は両方とも同じことをするが、プロの使用を見てきました。 –