2012-03-20 3 views
0

제품보기 표시에서 모델 조인을 통해 has_many를 Producttracklisting 목록에 중첩하려고합니다. 이 작업을 수행하는 올바른 방법은 무엇입니까? 여러 가지 실패한 시도에 대해 여러 가지 오류가 나타납니다.조인 모델의 양식을 중첩하는 올바른 방법은 무엇입니까?

<%= form_for(@producttracklisting) do |f| %> 
    <%= f.label :track_id %> 
    <%= f.text_field :track_id %> 
    <%= f.label :product_id %> 
    <%= f.text_field :product_id %> 
    <%= f.submit %> 
<% end %> 

을 그리고 내가 사용하는 제품/쇼 에이을 가지고 노력하고있어 : 모두와 함께

<%= render 'producttracklistings/form' %> 

다음과 같이

class Product < ActiveRecord::Base 
    has_many :producttracklistings 
    has_many :tracks, :through => :producttracklistings 
end 

class Track < ActiveRecord::Base 
    has_many :producttracklistings 
    has_many :products, :through => :producttracklistings 
end 

class Producttracklisting < ActiveRecord::Base 
    belongs_to :product 
    belongs_to :track 
end 

양식은 다음과 같이 모델은 위의 NilClass에 대한 "정의되지 않은 메서드`model_name '이 있습니다. Class"

감사합니다.

답변

3

accepts_nested_attributesfields_for을 조합하여 찾고 있습니다. 자세한 내용은 RailsCast Part 1part 2을 참조하십시오.

추 신 : ProductTrackListing 모델의 이름을 지정하면 product_track_listings이라는 테이블이 생성됩니다. 이것은 훨씬 더 읽기 쉽고 "레일 방식"

+0

대단히 감사합니다! – Raoot

+0

사실, 그게 내가 무엇을하는지 모르겠다. 나는 '중첩 된'이라는 단어를 오용했을 수도 있다고 생각한다. 내가하고 싶은 것은 Producttracklisting 양식을 제품 쇼보기로 불러 와서 해당 제품에 트랙을 연결할 수 있습니다. 기본적으로 '제품에 추가'버튼을 사용하여 각 트랙을 표시하는 루프를 실행할 계획입니다. 이것은 제품 트랙 목록/새로운보기 내에서 완벽하게 작동합니다. – Raoot

+0

아 ... 알겠습니다. 좋습니다, 잘 "NilClass : Class"에 대한 정의되지 않은 메서드'model_name' 오류는 form_for 호출에서 주어진 변수로 모델 이름을 해석 할 수 없다는 것을 의미합니다 (ergo @producttracklisting이 설정되지 않음). 따라서 동일한 양식을 사용하려면 컨트롤러에서이 변수를 설정해야합니다. 즉,'@producttracklisting = @ product.producttracklistings.build' 또는 그 ... – Vapire

관련 문제