2013-08-28 5 views
-1

나는 실제로 많은 하위 카테고리에 연습을 연결해야하는 앱을 만들고 있는데, 하위 카테고리는 상위 카테고리의 하위 항목입니다.Rails 3.2 카테고리 및 하위 카테고리

Exercice.rb belongs_to : 하위 범주

class Exercice < ActiveRecord::Base 
attr_accessible :title, :description, :subcategory_id 

validates :title, :presence => true 

has_many :programmeexercices 
has_many :programmes, :through => :programmeexercices 
belongs_to :subcategory 

end 

category.rb has_many : exercices을 통해 : 하위 범주 & has_many :

내 코드 하위 범주

class Category < ActiveRecord::Base 
attr_accessible :name 

has_many :exercices, :through => :subcategories 
has_many :subcategories 
end 

카테고리를 &을 has_many : belongs_to를 subcategory.rb

class Subcategory < ActiveRecord::Base 
attr_accessible :name, :category_id 

belongs_to :category 
has_many :exercices 
end 

exercices Exercices_controller

def new 
    @exercice = Exercice.new 
    @subcategories = Subcategory.all 
    end 

    def edit 
    @exercice = Exercice.find(params[:id]) 
    @subcategories = Subcategory.all 
    end 

    def create 
    @exercice = Exercice.new(params[:exercice]) 
    params[:subcategories][:id].each do |subcategory| 
     if !subcategory.empty? 
     @exercice.subcategory.build(:subcategory_id => subcategory) 
     end 
    end 

Category_controller

def new 
    @category = Category.new 
    end 

    def edit 
    @category = Category.find(params[:id]) 
    end 

def create 
    @category = Category.new(params[:category]) 
    end 

Subcategory_controller

def new 
    @subcategory = Subcategory.new 
    @categories = Category.all 
    end 

def edit 
    @subcategory = Subcategory.find(params[:id]) 
    @categories = Category.all 
    end 

    def create 
    @subcategory = Subcategory.new(params[:subcategory]) 

    params[:categories][:id].each do |category| 
     if !category.empty? 
     @subcategory.category.build(:category_id => category) 
     end 
    end 

Exercice의 _form보기는 내가 원하는 : 운동에 대한 하위 범주를 할당

 <li id="p-select"> 
     <% for subcategory in Subcategory.find(:all) %> 
     <div class="row"> 
      <section class="twelve columns"> 
      <article class="valign row"> 
       <div> 
       <label class="checkbox"> 
        <%= check_box_tag "checkboxInput", subcategory.id, @exercice.subcategories.include?(subcategory) %>          
       </label> 
       </div> 
       <div> 
       <h3><%= exercice.title %></h3> 
       </div>      
      </article> 
      <% end %> 
      </section> 
     </div> 
     </li> 
    </li> 

하위 카테고리 _form보기 내가하고 싶은 : 하위 범주에 대한 범주를 할당

<li class="field"> 
     <%= f.label :category %><br /> 
     <%= f.collection_select(:category_id, @categories, :id, :name, :include_blank => "Please select") %> 
    </li> 

양식이 무엇이든간에 오류 메시지가 표시됩니다.

,

=> 하위 범주/새로운 :

NoMethodError in Subcategories#new 
undefined method `category_id' for #<Subcategory:0x4f676b8> 

app/views/subcategories/_form.html.erb:16:in `block in _app_views_subcategories__form_html_erb___180268787_42055560' 
app/views/subcategories/_form.html.erb:1:in `_app_views_subcategories__form_html_erb___180268787_42055560' 
app/views/subcategories/new.html.erb:3:in `_app_views_subcategories_new_html_erb___1058729489_29352300' 
app/controllers/subcategories_controller.rb:30:in `new' 

=> exercice/새로운 : 내가 잘못 곳

NoMethodError in Exercices#new 
undefined method `subcategories' for #<Exercice:0x4c992c0> 

    app/views/exercices/_form.html.erb:31:in `block (2 levels) in _app_views_exercices__form_html_erb__725096104_41604048' 
app/views/exercices/_form.html.erb:25:in `each' 
app/views/exercices/_form.html.erb:25:in `block in _app_views_exercices__form_html_erb__725096104_41604048' 
app/views/exercices/_form.html.erb:2:in `_app_views_exercices__form_html_erb__725096104_41604048' 
app/views/exercices/new.html.erb:3:in `_app_views_exercices_new_html_erb___924742088_42063192' 
app/controllers/exercices_controller.rb:31:in `new' 

누구나 알고? 감사합니다 :)

+1

오류에 대해 자세히 설명하는 데 조금 더 집중할 가치가 있습니다. 예를 들어 스택 추적은 무엇입니까? 또한 양식 코드는 약간 혼란스러워 보입니다. 예를 들어'for exercise in Subcategory.find (: all)'는 연습입니까, 하위 범주입니까? – Shadwell

+0

맞습니다. 오류 메시지를 편집했으며 check_box_tag의 내용도 수정했습니다. 오류가 어디에서 왔는지 알 수 없습니까? –

+0

주제에서 벗어나지 만, '운동'의 철자가 틀림 없다는 사실을 깨닫게 된지 1 년 만에 너를 짜증나게 할 것이다. 나는 지금 그것을 교정 할 것이다. – snowangel

답변

0

솔직히 말해서 나는 돌아가서 많은 코드를 재 작업해야한다고 생각합니다.

Exercisebelongs_to :subcategory이므로 두 번째 오류의 원인이되는 양식에 exercices.subcategories (으)로 전화가 걸려 운동 당 하나의 하위 카테고리 만 가질 수 있습니다.

모든 하위 범주를 반복하면서 각 하위 항목에 대해 연습 유형에 대한 확인란을 제공하면 연습에 많은 하위 범주가 있음을 나타냅니다.

체크 박스 세금 이름을 checkBoxInput으로 지정한 다음 컨트롤러에 subcategories[] 매개 변수가 필요합니다.

또한 각 하위 카테고리의 연습 제목을 출력합니다.

그래서 몇 가지 단계를 거쳐 특정 오류를 해결하기 전에 코드의 논리를 정리할 것입니다.

0

좋아, 알았어!

내가 원하는 것 : 연습에는 여러 개의 하위 범주와 단 하나의 범주가 있습니다. 하위 범주에는 하나의 범주 만 있습니다. 범주에는 여러 하위 범주가 있습니다.

****class Exercice < ActiveRecord::Base**** 
    attr_accessible :title, :subcategory_id 

    has_many :subcategories 
    has_one :category, :through => :subcategories 


****class Category < ActiveRecord::Base***** 
    attr_accessible :name 

    has_many :subcategories 
    has_many :exercices, :through => :subcategories 


***class Subcategory < ActiveRecord::Base**** 
    attr_accessible :name, :category_id 

    belongs_to :category 
    has_many :exercices 

맞습니까?

관련 문제