Railsは初めてで、ネストされたモデル属性をビューに適切に表示する方法について少し混乱しています。
Rails3.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パーシャルを使用して、これらのモデルをネストされた形式で使用しています。ここでcompanys_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 %>
しかし、車両の場合と同じように、会社->車両->エンジンをループで参照するにはどうすればよいですか?私はいつでも提案を受け付けています!
現在、@ company.vehicles.enginesを使用して一連の構文を試しましたが、次のようになります。
undefined method `engines' for #<ActiveRecord::Relation:0x007fd4305320d0>
コントローラとショービューの適切な構文に慣れていないのは私だけだと確信しています。
どんな助けでも大歓迎です=)
また、そのループを実行するためのより良い方法はありますか?多分
<%= @company.vehicles.each |vehicle| %>
<%= vehicle.make %>
...
<% end %>
?? :)