如果我发布这样一个微不足道的问题,我感到非常抱歉,但我真的被困住了,谷歌无法帮助我,也许是因为我是Ruby on Rails的新手。
我有两张桌子:
的人
id:整数
name:String
地址
id:整数
person_id:整数
name:String
我想检索与Person
加入的Address
。此代码段有效,但前提是此人实际上有可用的地址:
@person = Person.where('person.id' => params[:id])
.joins(:address)
.select('person.id as id, address.id as aid, person.name as name, address.name as aname').first
我的观点:
<h2><%= @person.name %></h2>
<p><%= @person.aname %></p>
也许我做了一些概念错误的事情。正如我所说,只要Person
有相关Address
,我的视图就会显示它,否则如果没有Address
则会显示错误。
答案 0 :(得分:2)
您可以考虑使用.includes(:relation)
方法生成LEFT OUTER JOIN
查询。另外,请考虑使用.find(:id)
方法查找具有特定主键的人员。这将使您的查询更简单。
@person = Person.find(params[:id]).includes(:address)
此外,您可能希望在视图中调用地址字段,如下所示:
<h2><%= @person.name %></h2>
<p><%= @person.address.try(:name) %></p>
注意:在地址(@person.address.name
)上调用名称违反了Law of Demeter,您应该考虑在address_name
课程中添加Person
方法。在rails中,您可以使用delegates :x, to: :y
语法。