Rails JOIN TABLES

时间:2008-11-27 01:16:16

标签: ruby-on-rails associations

我有以下SQL QUERY:

SELECT articles.name,articles.price,users.zipcode FROM articles INNER JOIN users ON users.id = articles.user_id WHERE vectors @@ to_tsquery('crime')ORDER BY articles.price ASC

我想在一个名为Articles(Articles belongs_to user)的ActiveRecord类的find方法中编写它。基本上我想搜索文章并从用户访问zipcode属性(用户has_many文章)

我写了以下版本,但我不确定它是否有效,因为在回复中我没有收到有关用户邮政编码的任何信息。

a = Article.find(:all,:conditions =>“vectors @@ to_tsquery('crime')”,:join =>:user,:order =>:price,:include => :用户)

但我不知道如何访问邮政编码信息。我该如何访问这些信息?这是正确的方法吗?

此致

维克多

1 个答案:

答案 0 :(得分:2)

如果你像上面所说的那样结合ArticlesUsers,这应该很简单:

@articles = Article.find(:all, :conditions => "…", :include => :user)

然后,在您看来,您可以这样做:

<ul>
<% for each article in @articles do %>
  <li><%= article.user.zipcode %></li>
</ul>
<% end %>

这是有效的,因为Rails为模型中的父对象(User)创建了一个属性 - 您可以阅读更多关于in the API docs的信息。这甚至可以在没有上面的“include”键的情况下工作,但是将其删除将意味着在循环的每个步骤中进行数据库查询。