0

Rails 3.2 を使用しています。次のコードがあります。

# transports_controller.rb
@transports = %w(car bike)

@transports.each do |transport|
  instance_variable_set("@#{transport.pluralize}", 
                        transport.classify.constantize.all)
end

# transports/index.html.erb
<% @transports.each do |transport| %>
  <h1><%= transport.pluralize.titleize %></h1>
  <% @transport.pluralize.each do |transport_item| %>
    <%= transport_item.name %><br>
  <% end %>
<% end %>

コントローラーのコードは正しいですが、ビューのコードが間違っています。@transport.pluralize.each文字通り呼び出すことはできません。期待される結果は次のとおりです。

<h1>Cars</h1>
Ferrari<br>
Ford<br>

<h1>Bikes</h1>
Kawasaki<br>
Ducati<br>

どうすればいいですか?

4

2 に答える 2

1

このためにインスタンス変数を作成する必要はありません。配列 (またはハッシュ) を使用するだけです。

transport_classes = [Car, Bike]

@transports = transport_classes.map { |transport_class|
  [transport_class, transport_class.all]
}
# this returns a nested array:
# [
#   [Car, [#<Car id:1>, #<Car id:2>]],
#   [Bike, [#<Bike id:1>, #<Bike id:2>]
# ]

あなたの見解では:

<% @transports.each do |transport_class, transport_items| %>
  <h1><%= transport_class.to_s.pluralize.titleize %></h1>
  <% transport_items.each do |transport_item| %>
    <%= transport_item.name %><br>
  <% end %>
<% end %>
于 2013-05-15T07:45:48.993 に答える
1

を使用するのと同じようにinstance_variable_set、利用可能な がありinstance_variable_getます。

于 2013-05-15T02:30:31.320 に答える