我是rails的新手,我对如何在视图中正确显示嵌套模型属性感到困惑。
我正在使用Rails 3.2.6。
我的3个型号:
class Company < ActiveRecord::Base
attr_accessible :name, :vehicles_attributes, :engines_attributes
has_many :vehicles, :dependent => :destroy
accepts_nested_attributes_for :vehicles, :allow_destroy => true,
:reject_if => proc { |attrs| attrs.all? { |k, v| v.blank? } }
end
class Vehicle < ActiveRecord::Base
attr_accessible :company_id, :engines_attributes
belongs_to :company
has_many :engines, :dependent => :destroy
accepts_nested_attributes_for :engines, :allow_destroy => true,
:reject_if => proc { |attrs| attrs.all? { |k, v| v.blank? } }
end
class Engine < ActiveRecord::Base
attr_accessible :make, :model, :model_year, :vehicle_id
belongs_to :vehicle
end
我使用simple_form_for和simple_fields_for partials以嵌套形式使用这些模型。这里是companies_controller.rb
def show
@company = Company.includes(vehicles: :engines).find(params[:id])
#added this, thanks to @achempion
...
end
def new
@company = Company.new
@company.addresses.build
@company.vehicles.build
...
end
我的节目观点:
<% for vehicle in @company.vehicles %>
<p>Make: <strong><%= h vehicle.make %></strong></p>
<p>Model: <strong><%= h vehicle.model %></strong></p>
<p>Odometer Reading: <strong><%= h vehicle.odometer %></strong></p>
<p>Vehicle ID No. (VIN): <strong><%= h vehicle.vin %></strong></p>
<p>Year: <strong><%= h vehicle.year %></strong></p>
<% end %>
但我如何引用公司 - &gt;车辆 - &gt;循环中的引擎就像我对车辆一样? 我总是乐于接受建议!
目前我已经尝试了@ company.vehicles.engines的一堆语法,但我一直在
undefined method `engines' for #<ActiveRecord::Relation:0x007fd4305320d0>
我确信只是我对控制器中的正确语法以及show视图都不熟悉。
感谢任何帮助=)
另外,是否有更好的方法来进行循环?也许
<%= @company.vehicles.each |vehicle| %>
<%= vehicle.make %>
...
<% end %>
?? :)
答案 0 :(得分:1)
我认为@company = Company.includes(vehicles: :engines).find(params[:id])
这是一个好方法。查看更多here
你的主模型必须忘记has_many :engines, :dependent => :destroy
因为它适用于车辆模型。祝你好运!
你也可以看到引擎:
@company.vehicles.each do |vehicle|
vehicle.engines.each do |engine|
puts engine.id
end
end
编辑:修正小错字。