2

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 %>

?? :)

4

1 に答える 1

1

@company = Company.includes(vehicles: :engines).find(params[:id])それは良い方法だと思います。ここでもっと見る

has_many :engines, :dependent => :destroyそして、メインモデルは車両モデル用なので忘れる必要があります。幸運を!

また、エンジンは次のように表示されます。

@company.vehicles.each do |vehicle|
  vehicle.engines.each do |engine|
    puts engine.id
  end
end

編集:小さなタイプミスを修正しました。

于 2012-09-07T17:13:31.010 に答える