2011-01-19 10 views
0
コントローラで、私はここではRailsのモデル といくつかの問題を抱えている

親愛なる、開発者は、私のSQLテーブルであるルビーon Railsのモデル団体が問題

create_table "areas", :primary_key => "ndc", :force => true do |t| 
    t.string "townname", :limit => 256, :null => false 
    end 

    create_table "books", :primary_key => "ndc", :force => true do |t| 
    t.integer "booked", :null => false 
    t.integer "free", :null => false 
    end 



class Book < ActiveRecord::Base 
    self.primary_key = "ndc" 
    has_one :area, :foreign_key => 'ndc' 
end 

class Area < ActiveRecord::Base 
    self.primary_key = "ndc" 
    belongs_to :book , :foreign_key => 'ndc' 
end 

をnubie私は本番モードでは、このようなコード

@books = Book.paginate :page => params[:page] || 1, :per_page => 10 
    @books.each do |booking| 
     p booking.area 
     p booking 

    end 

を持っている」doesnのt仕事、予約。エリアは無名です。何ができますか?

config.cache_classes場合エリアcashe_classes =真
areasを選択した場合。* areasareas .ndc = NULL)LIMIT 1 なく外からそうbooking.areaは このようなクエリを生成する=真

をnilをbecamesクラスを換金することはareasを選択 * areasareas .ndc = 30)LIMIT belongs_toのを除去することにより、FIXED 1

FROM:ブック、:FOREIGN_KEY => 'NDC' F ROMエリアクラス。

+0

Bookクラスにself.primary_key = "ndc"を追加しましたが、今協調しているようです。ありがとうございます – Fivell

+1

はい、主キーフィールドに "id"以外の名前を使用する場合はいつでも、主キーを指定するActiveRecordクラスにステートメントを挿入する必要があります。 –

+0

ok私の質問 – Fivell

答えて

2

areasテーブルには、ブックテーブルの主キーと一致する整数フィールドが必要です(book_id)。

+0

thnksを更新しました。この場合はbookにはarea_idが必要ですが、そうでなければforeign_keyをovverideすれば関連付けを使用できませんか? – Fivell

+0

あなたはそれを行うことができますが、has_oneステートメントはAreaクラスにあり、belongs_toはBookクラスにある必要があります(belongs_toステートメントを持つクラスは、has_oneクラスを参照するXXX_idフィールドを持つことが必要です)。また、実際には、Areasクラスにhas_oneステートメントではなく、複数のブックがあるエリアに属していると仮定して、has_manyステートメントを持たせることもできます。 –

+0

私はそれを理解しました。質問は次にです:追加の列を作成せずにndcフィールドでそれらを関連付ける方法はありませんか? – Fivell