1

こんにちは私はRailsにまったく慣れていないので、これがばかげている場合は申し訳ありません。私は何時間も探してきました。何を聞いたらいいのかわからない。助けてくれてありがとう。

コードと説明を含むテーブルを作成しようとしています。次に、コードが含まれる別のメインテーブル。これらの2つのテーブルを結合して、コードで並べ替えて説明を取得できるようにします。説明を引き出すためのコードがわからないようです。

これはコードと説明の移行です

create_table :sniffs do |t|
  t.string "sniff_desc", :limit => 5
  t.timestamps
end    

これはメインテーブルの移行です

create_table :lenders do |t|
  t.integer "sniff_id"
  t.timestamps
end    

add_index("lenders", "sniff_id")

これらはモデルです

class Lender < ActiveRecord::Base
  belongs_to :sniffs
  scope :ranked, order("lenders.sniff_id ASC")
end

class Sniff < ActiveRecord::Base
  has_many :lenders
end

スニフテーブルは

id  sniff_desc
 1  Great
 2  OK
 3  Bad

貸し手テーブルは

id  sniff_id
 1  2
 2  2
 3  3

これは私が理解できないことですか?特定の貸し手インスタンスに対して、sniff_descを取得するにはどうすればよいですか。たとえば、私はlender.id(2)を使用していて、sniff_desc"OK"を取得したいと考えています。

だから私がレールコンソールなら

    lender = Lender.find(2)
    lender.sniffs

私は得る

=> nil

私はスニフで2番目のレコードを取得すると思いました。これを入力すると

Sniff.find(lender.sniff_id).sniff_desc

正解です

=> "OK" 

しかし、そのコードは、1対多の関係を行うという目的全体を無効にしているようです。

私は1対多の正しいことを理解していませんか?または、これを修正するにはどうすればよいですか?

助けてくれてありがとう。この質問は単純すぎるので、他に質問する人は見つかりませんでしたか?!

4

1 に答える 1

1

あなたはほとんどそれを正しくしました。唯一の問題は、belongs_to複数形ではなく単数形を使用することです。

変更する必要があります:

belongs_to :sniffs

に:

belongs_to :sniff

これにより、次のことができるようになります。

lender = Lender.find(2)
lender.sniff.sniff_desc #=> "OK"
于 2012-05-19T07:13:51.867 に答える