2009-07-24 9 views
1

既存のデータベースをレールで使用しようとしています。以下のMySQLのコンソールでちょうど素晴らしい作品:SQLジョインでのレール

select title,blog_name from exp_weblog_titles JOIN exp_weblogs ON exp_weblog_titles.weblog_id = exp_weblogs.weblog_id LIMIT 1; 

+------------+---------------+ 
| title  | blog_name  | 
+------------+---------------+ 
| What We Do | chicago_pages | 
+------------+---------------+ 
1 row in set (0.00 sec) 

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

>> @titles = Title.find_by_sql("select title,blog_name from exp_weblog_titles JOIN exp_weblogs ON exp_weblog_titles.weblog_id = exp_weblogs.weblog_id LIMIT 1") 
=> [#<Title title: "What We Do">] 
私はいくつかの理由でRailsが唯一という事実に当てつけを見てきました

最初のテーブルの列をコンソールモードで表示してください。結合された属性にアクセスする方法を教えてもらえますか?

答えて

0

私は、結合属性の意味を完全には分かりません。しかし、私は何が必要なのこれだと思います:

class Title < ActiveRecord::Base 
    belongs_to :weblog 
end 

class Weblogs < ActiveRecord::Base 
    has_many :titles 
end 

あなたは、次の

@weblog = Weblog.find(...) 
@webglog.title.attributes 

そして助け一方

@titles = Title.find_all 
@titles[0].weblog.attributes 

希望をしているウェブログのタイトル属性を取得することができます

0

既存のテーブルを再構成したくない場合は、Railsに準拠させることができます。このようARモデルと

class Title < ActiveRecord::Base 
    set_table_name "exp_weblog_titles" 

    belongs_to :weblog, :foreign_key => 'weblog_id' # foreign_key not even needed here 
end 

class Weblog < ActiveRecord::Base 
    set_table_name "exp_weblogs" 
    set_primary_key "weblog_id" 

    has_one :title, :foreign_key => 'weblog_id' # or here 
end 

これは動作するはずです:

Weblog.all.each {|w| puts "#{w.title.title} #{w.blog_name}"} 

またはTitle.connection.select_rows('SELECT statement here')を使用し、これは行の配列を返しますが、その後、私は使用してのポイントを得ることはありませんRails。

関連する問題