0

我遇到了多態關聯問題。Rails多態關聯錯誤

關於我的項目的快速說明。你可以在這裏看到:majorfinder.com在我的應用程序將有專業,學校和職業。我希望能夠爲每個評論添加評論。因爲我剛剛開始,我剛剛開始爲專業增加評論,但創建了這個協會,以便當我到達職業和學校時,評論協會將會很快進行。

這裏是我的協會:

型號/ review.rb

belongs_to :user 
belongs_to :reviewable, polymorophic: true 

型號/ user.rb

has_many :reviews 

型號/ major.rb

has_many :reviews, as: :reviewable 

我評論的數據庫模式看起來像這樣的:

create_table "reviews", :force => true do |t| 
    t.text  "review" 
    t.datetime "created_at",  :null => false 
    t.datetime "updated_at",  :null => false 
    t.integer "user_id" 
    t.integer "reviewable_id" 
    t.string "reviewable_type" 
    end 

在我的專業控制器我爲了創建一個URL,看起來像這樣www.majorfinder.com/majors/major-name其次this railscast。所以,我的專業控制器的部分看起來像這樣:

def show 
    @major = Major.find_by_slug(params[:id]).includes(:reviews => :user) 
end 

在我的專業顯示的網頁我有:

<% @reviews.each do |review| %> 
    <div> 
     <h3><%= link_to review.review, 
     :controller => "reviews", :action => "show", :id => review.id %></h3> 
     <small>Posted on <%= review.created_at %> by 
     <a href="#"><%= review.user.profile_name %></a></small> 
    </div> 
    <% end %> 

最後,這裏是我的路線:

resources :majors, has_many: :reviews 

我收到以下錯誤:

NoMethodError in MajorsController#show 

undefined method `includes' for #<Major:0x007f9466e001a8> 

這是從控制檯:

Started GET "/majors/statistics" for 127.0.0.1 at 2013-03-05 07:45:01 -0700 
Processing by MajorsController#show as HTML 
    Parameters: {"has_many"=>:reviews, "id"=>"statistics"} 
    Major Load (24.2ms) SELECT "majors".* FROM "majors" WHERE "majors"."slug" = 'statistics' LIMIT 1 
    CACHE (0.0ms) SELECT "majors".* FROM "majors" WHERE "majors"."slug" = 'statistics' LIMIT 1 
Completed 500 Internal Server Error in 28ms 

NoMethodError (undefined method `includes' for #<Major:0x007f8ad51fdd00>): 
    app/controllers/majors_controller.rb:16:in `show' 

在majors_controller.rb文件第16行是這個:

@major = Major.find_by_slug(params[:id]).includes(:reviews => :user) 

你能看到我失去了什麼,或者我應該改變?看起來解決方案很簡單,但我不確定它是什麼。在此先感謝您的幫助!

+0

你的問題很明顯:'包括'方法沒有爲主要實例定義。我不太確定你的問題的解決方案是什麼。你是從例子中得到的嗎?你想用這個方法調用做什麼? – drewinglis 2013-03-05 22:19:15

回答

1

我相信你想要做的是急切的加載:reviews當你找到主要。你近了,但你的訂單倒退了。它需要

@major = Major.includes(:reviews => :user).find_by_slug(params[:id]) 

有關預先加載結帳這個RailsGuides文章的詳細信息。

+0

是的,確切!謝謝!感謝您的導軌指南。我一直在尋找,但不知道術語渴望加載。對此,我真的非常感激! – lflores 2013-03-06 03:47:39

+0

非常好,我很高興我能幫上忙! :) – 2013-03-06 03:52:57