2009-07-24 32 views
1

試圖在rails中使用現有數據庫。下面的作品只是在MySQL控制檯很大:SQL加入Rails中

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'),這將返回行的一組,但我沒有得到使用的點軌。