2012-04-28 2 views
0

두 개체 구성 요소 & 출처가 있습니다. 성분에 내가
뷰가 표시ruby ​​- 채움 콤보 상자

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

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

을 origin_id 한 수준의 성분이 선언되도록에서

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 

내가 어떻게 해결해야합니까?

편집 추가 :

데프 @ingredient = Ingredient.find ([: ID] PARAMS) 편집 @origins = Origin.all 끝을

+0

"편집 양식에 쓰고 작동합니다"- 파산하지 않은 경우 수정하지 마십시오. –

+0

알아. 그러나 다른 형태로 나는 그것을 바꾸고 싶다. 노력하는 것보다 효과가있는 것을 시도하고 변경하는 것이 낫습니다. 디버그하기 쉽다. – Jeb

답변

1

어디서 @origins 여기에 표시되지 않습니다 선언됩니다. 당신의 @origins는 그냥 수집이 아니라 무의미한 것 같습니다.

+0

땡볕. 편집을 보아라. – Jeb