Rails ActiveRecord - 仅加载某些关联记录

时间:2013-12-18 13:13:39

标签: ruby-on-rails activerecord

我有两个班级AddressReview。评论有地址,地址可以有很多评论。我通过说Review belongs_to AddressAddress has_many Reviews

来对此进行了建模

在应用程序中,主要用例是创建一个新的评论。作为创建评论的一部分,用户将输入一个地址,在我们尝试与现有记录匹配的幕后,或者在必要时创建一个新地址。

我已经设置了这样的路由:resources :addresses, only: [:new, :create, :show, :update], :as => :reviews, :path => :reviews, :controller => :reviews。 这使我能够拥有/reviews/[:id]等网址。

使用id = [:id]加载地址和单个关联审核的最佳方式是什么。

到目前为止我已经

@review = Review.find(params[:id])
@address = @review.address

但是,如果我再做一些像

这样的事情
@address.reviews

我相信ActiveRecord会加载所有相关的评论,这不是我想要的,因为我认为Review是主要实体,它有一个地址作为其中的一部分。

我是否混淆了我的设计?从概念上an address is part of a review但我看不出任何建模方式,以便address can still have many review'

修改 我认为我的一些困惑来自于我的观点具有需要获取地址的表格,因为地址具有accepts_nested_attributes_for :reviews,这使得所有验证和表单构建更容易。

非常感谢提前!

1 个答案:

答案 0 :(得分:1)

你已经正确地建模了它。

对于您的表单,您很可能需要以下内容:

= form_for @review do |f|
  = f.body
  = f.fields_for :address do |af|
    = af.street
    = af.city

然后在你想要的评论模型中:accepts_nested_attributes_for:address