如果改了model, console里没反应的话, 重启一下console试试.
问题里的sql不太好, 实际上rails是直接执行select * from articles where (articles.cat_id = 1), 不需要连接.
我觉得找一个category_name = 'xxx'的所有articles比较好.
对应的sql应该是
select
*
from
articles
inner join categories on articles.article_id = categories.id
where
categoties.category_name = "rails"
;
对应的rails语句A
Category.find(:first, :conditions => {:category_name => "rails"}).articles
-->
#实际上是两条sql (参考log/development.log)
SELECT * FROM categories WHERE (categories.`category_name` = 'rails') LIMIT 1
SELECT * FROM articles WHERE (articles.cat_id = 3)
对应的rails语句B (
预先读取子记录, AWDWR_CN_V2 Page358)
Category.find(:first, :conditions => {:category_name => "rails"},
:include => :articles).articles
-->
SELECT categories.id AS t0_r0,
categories.category_name AS t0_r1,
articles.article_id AS t1_r0,
articles.cat_id AS t1_r1,
articles.article AS t1_r2
FROM categories
LEFT OUTER JOIN articles ON articles.cat_id = categories.id
WHERE (categories.category_name = 'rails')有两个问题如下:
1. 这儿直接使用了左连接, 不知道右连接和内连接的话, rails能不能直接处理, 还是要写sql.
貌似AWDWR里没有特别讲到左右连接的问题. 就这个例子, 改为到articles是内连接, 相关的文件怎么改.
2. 这儿和想象的sql还有另外一个区别, 就是categories连接articles, 反过来Article.find(...)就不会写了.
各位看到过相关的文章或是有什么指点吗?
[
本帖最后由 5swords 于 2008-5-23 17:52 编辑 ]