[英]Ruby on Rails - nested attributes: How do I access the parent model from child model
[英]Access the attributes of a sister child via the parent model
因此,我一直到處尋找,似乎無法為此找到正確的概念解釋/技術過程,並且很可能會錯誤地使用它。
我有2個子模型,由同一父模型連接,我想從CHILD A的索引視圖訪問CHILD B的屬性:通過父模型的實例。
高層概述
Property
/ \
Order Owner
基本上,我有一個索引頁面,顯示所有未結Orders
,每個Order
必須有一個Property
(父對象),每個Property
都有一個所有者。 因此,我在“ Orders
索引頁面中,我想查看Property's Owner
的first_name
,如何訪問它?
如果我做類似的事情:
@order.property.owners.first_name
我收到一個錯誤undefined method
,但是如果這樣做:
@order.property.owners
我沒有收到錯誤,而是:
#<Owner::ActiveRecord_Associations_CollectionProxy:0x007f8a85368988>
在我看來與所有其他正確信息一起出現。
楷模
Property
has_many :orders
has_many :owners
accepts_nested_attributes_for :owners
Owner
belongs_to :property
Orders
belongs_to :property
has_many :owners, through: :property
accepts_nested_attributes_for :owners
訂單控制器
def open_orders
@open_orders = Order.where(status: "Open").paginate(page: params[:page], per_page: 15)
###@orders = Order.all
###@properties = Property.find(@orders.property.id)
###@owners = Owner.find(@properties.owners.id)
render 'orders/open'
結束
^注釋掉了我正在嘗試但無法正常工作的東西,包括它,以防我在某處有點距離。
Open_orders
視圖
<% @open_orders.each do |order| %>
<tr>
<td><%= order.client_id %></td>
<td><%= order.order_number %></td>
<td><%= order.property.address1 %></td>
<td><%= order.property.owners %></td>
<td><%= order.order_update ? "Yes" : "No" %></td>
<td><%= order.status %></td>
<td><%= order.task %></td>
<td><%= order.created_at %></td>
<td><%= link_to fa_icon("edit"), edit_property_order_path(order, order.property.id), class: "m-r-xs", remote: true, data: { 'data-toggle' => "modal", 'data-target' => '#orders-modal'} %></td>
</tr>
根據您的模型定義,一個order
具有多個 owners
因此,您將獲得所有者的有效記錄集合,而不是單個對象。
有兩種處理方法,
您必須預先加載所有者,以避免n + 1個查詢
在您的控制器中
@open_orders = Order.where(status: "Open").includes(:owners).paginate(page: params[:page], per_page: 15)
在您看來
<td><%= order.owners.pluck(:first_name).join(',') %></td>
更新
要獲得full_name
主人的,你可以在你定義一個方法owner.rb
作為
def full_name
"#{first_name} #{last_name}"
end
在您看來
<td><%= order.owners.map(&:full_name).join(',') %></td>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.