2011-02-03 6 views
0

私はこれでほとんど自分自身を捜してしまいました。私は同じようなものに近づいています。this stack overflow question(一度にいくつかの質問をします)。私には1つしかありません。 [OK]を2つ - しかし、最初のものへの回答を提供することは、以下の要件を遵守している限り、あなたの答えを受け入れます。Rails 3は非標準のキーフィールドと結合します

私は、従来のデータベースでRails 3とRuby 1.8.7を使用しています。議論の対象となっているのは、Railsのバージョンだけです。私はRuby 1.8.7とデータベース構造に悩まされています。ここで

関与モデルの重要な部分である:

class List < ActiveRecord::Base 
    set_primary_key "ListID" 

    has_many :listitem, :foreign_key => "ListID", :dependent => :destroy 
    has_many :extra_field, :foreign_key => "ListID", :dependent => :destroy 
end 

class Listitem < ActiveRecord::Base 
    set_table_name "ListItems" 
    set_primary_key "ListItemID" 

    belongs_to :list 
    has_many :list_item_extra_field, :foreign_key => 'ListItemID', :dependent => :destroy 
end 

これは私がレールコンソールで得るものです:

irb(main):001:0> List.joins(:listitem).to_sql 
=> "SELECT [lists].* FROM [lists] INNER JOIN [ListItems] ON [ListItems].[ListID] IS NULL" 

私はより多くのようなSQL文を期待していた場合:

SELECT [lists].* FROM [lists] INNER JOIN [ListItems] ON [ListItems].[ListID] = [Lists].[ListID] 

上記の質問に私は正しい答えが得られます。ボーナスポイントは、あなたと同等のものに取得する方法を私に伝えることができた場合:

SELECT [lists].*, COUNT([ListItems].*) FROM [lists] INNER JOIN [ListItems] ON [ListItems].[ListID] = [Lists].[ListID] 

答えて

0

を使用し、答えはRailsのと途方もなく簡単です...

私のテーブルが混在ケースを使用して命名されています。私のリストのモデルはそれを修正し、次の行を追加::listitem(s)

set_table_name "Lists" 

複数(またはその欠如)を前に、または、この変更後には効果がないように見えました。

0

あなたの最初の質問:あなたはおそらく、テーブルの移行をめちゃめちゃに。移行ファイルで

create_table :lists, {:id => false} do  
.... 
end 

を使用して、execute "ALTER TABLE lists ADD PRIMARY KEY (listid);" を追加ところで、それは(単一、複数、ではない)has_many :listitemsです。

詳細な説明のためにここを見て:Using Rails, how can I set my primary key to not be an integer-typed column?

2番目の質問:私はメソッドではなく、1つの方法の組み合わせを使用することになります。あなたはリストの名前を返す必要がありますし、このリストのリスト項目の名前を数えますか?最初の問題を解決した後、単にいつものようにlist.namelist.list_items.count

関連する問題