0

ポリモーフィックな関連付けに問題があります。

私のプロジェクトについての簡単な説明。こちらで確認できます: majorfinder.com 私のアプリでは、専攻、学校、およびキャリアが表示されます。それぞれのレビューを追加できるようにしたい。私は始めたばかりなので、専攻のレビューを追加することから始めていますが、キャリアや学校に着いたときにレビュー協会がすぐに機能するように協会を作成しています.

ここに私の協会があります:

models/review.rb

belongs_to :user
belongs_to :reviewable, polymorophic: true

models/user.rb

has_many :reviews

models/major.rb

has_many :reviews, as: :reviewable

レビュー用の私の db スキーマは次のようになります。

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

私の専攻コントローラでは、www.majorfinder.com/majors/ major-name のような URL を作成するために、この 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)

私が欠けているもの、または何を変更する必要があるかがわかりますか? 解決策は簡単なようですが、それが何であるかはわかりません。よろしくお願いします。

4

1 に答える 1

1

あなたがやろうとしているのは:reviews、少佐を見つけたときの熱心な負荷だと思います。あなたは近くにいますが、あなたの注文は逆です。それはする必要があります

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

積極的な読み込みの詳細については、このRailsGuidesの記事をご覧ください。

于 2013-03-06T01:19:12.027 に答える