2015-09-29 40 views
0

我有3個表categories與字段id,名稱,parent_id,coaches與id,名稱和連接表categories_coaches與category_id和coach_id。我想用category_id連接兩個表(categories_coaches和categories)並獲取parent_id。當我運行此,請給我這個如何解決軌道未初始化的常量錯誤

這裏的解決方案是我的代碼

模式

class Category < ActiveRecord::Base 
    has_and_belongs_to_many :coaches 
end 

class Coaches < ActiveRecord::Base 
    has_and_belongs_to_many :categories 
end 

查看/ new.html.erb

<%= select_tag 'category', options_from_collection_for_select(@category.coaches, 'id', 'name')%>

控制器

class CategoriesController < ApplicationController def new end end

當我嘗試這個IAM收到此錯誤

enter image description here

+0

的型號名稱和聯繫是錯誤的,你應該看看在http:/ /guides.rubyonrails.org/association_basics.html – Pavan

+0

使用'CategoryCoaches'不是'CategoriesCoaches' –

+1

而不是使用圖像善意地提及問題中的錯誤。它可以幫助其他有相同錯誤的用戶找到這個問題 – Gogo

回答

1

您需要通過奇異名稱格式打電話給你的模型。

您還需要確保你的協會反映無論是單數還是複數(belongs_to是單數):

class CategoryCoach < ActiveRecord::Base 
    belongs_to :category 
end 

這還要爲其他協會:

#app/models/coach.rb 
class Coach < ActiveRecord::Base 
    has_many :category_coaches 
end 

ActiveRecord

您需要處理ActiveRecord關聯。具體來說,您已經以特有的方式關聯了您的模型。

我會使用一個has_and_belongs_to_many協會:

#app/models/coach.rb 
class Coach < ActiveRecord::Base 
    has_and_belongs_to_many :categories 
end 

#app/models/category.rb 
class Category < ActiveRecord::Base 
    has_and_belongs_to_many :coaches 
end 

你會需要用下面的連接表:

#categories_coaches 
category_id | coach_id 

這會給你打電話@category.coaches等的能力:

enter image description here


結構

我覺得有一個更深層次的結構性問題,以知足。

首先,爲什麼要將ProgrammesController嵌入到命名空間?命名空間與您的控制器結構無關 - 它只是提供了一種在應用程序中隔離功能的方法。

您應該構建您的應用程序是這樣的:

#config/routes.rb 
resources :coaches do 
    resources :programmes #-> url.com/coaches/:coach_id/programmes/new 
end 

#app/models/coach.rb 
class Coach < ActiveRecord::Base 
    has_many :programmes 
end 

#app/models/programme.rb 
class Programme < ActiveRecord::Base 
    belongs_to :coach 
end 

#app/controllers/programmes_controller.rb 
class ProgrammesController < ApplicationController 
    def new 
     @coach = Coach.find params[:coach_id] 
     @programme = @coach.programmes.new 
    end 
    def create 
     @coach = Coach.find params[:coach_id] 
     @programme = @coach.programmes.new programme_params 
     @programme.save 
    end 

    private 

    def programme_params 
     params.require(:programme).permit(:x, :y, :z) 
    end 
end 
+0

也不是'has_many:categories_coaches'應該是'has_many:category_coaches'? – Pavan

+0

是的,我只是寫了^ _ ^,感謝提示! –

+0

@RichPeck ..請參閱我的代碼和問題中的更新 – SreRoR

0

你的公會是錯誤命名爲:

class Category < ActiveRecord::Base 
    has_many :category_coaches 
end 
相關問題