我有两个班级Address
和Review
。评论有地址,地址可以有很多评论。我通过说Review belongs_to Address
和Address 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
,这使得所有验证和表单构建更容易。
非常感谢提前!
答案 0 :(得分:1)
你已经正确地建模了它。
对于您的表单,您很可能需要以下内容:
= form_for @review do |f|
= f.body
= f.fields_for :address do |af|
= af.street
= af.city
然后在你想要的评论模型中:accepts_nested_attributes_for:address