0

私は2つのオブジェクトの成分と起源を持っています。
各材料には起源があるので、私がorigin_idを持っている材料には
、ビューが表示されます

<p>
  <b>Name:</b>
  <%= @ingredient.name %>
</p>

<p>
  <b>Origin:</b>
  <%= @ingredient.origin_id %>
</p>

クラス成分は次のように宣言されています

class Ingredient < ActiveRecord::Base
  has_and_belongs_to_many :recipes
  belongs_to :origin

  attr_accessible :name, :origin_id
end

クラスの起源

class Origin < ActiveRecord::Base
  attr_accessible :name
end

私が書いた編集フォームでそれは機能します

<% originsArray = Origin.all.map { |origin| [origin.name, origin.id] } %>
  <div class="field">
    <%= f.label :origin_id %><br/>
    <%= f.select(:origin_id, originsArray) %><br/>
</div>

しかし、代わりに書く場合(すべてのチュートリアルのように)

 <%= collection_select(:origin, :id, @origins, :id, :name, options ={:prompt => "-Select a payment"}, :class =>"origin") %>

私は得る

undefined method `map' for nil:NilClass

何を修正すればよいですか?

編集を追加:

def edit @ingredient = Ingredient.find(params [:id])@origins = Origin.all end

4

1 に答える 1

1

@originsが宣言されている場所はここには表示されません。@originsはnilであり、コレクションではないようです。

于 2012-04-28T17:23:49.227 に答える