我遇到了多态关联的问题。
关于我的项目的快速解释。你可以在这里看到它:majorfinder.com 在我的应用程序上会有专业、学校和职业。我希望能够为每个添加评论。由于我刚刚开始,我刚开始为专业添加评论,但创建了协会,这样当我进入职业和学校时,评论协会会迅速发展。
以下是我的联想:
模型/review.rb
belongs_to :user
belongs_to :reviewable, polymorophic: true
模型/用户.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
在我的专业控制器中,我遵循了这个 railscast以创建一个看起来像 www.majorfinder.com/majors/major-name 的 URL。所以我的专业控制器的一部分看起来像这样:
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)
你能看到我缺少什么或我应该改变什么吗?似乎解决方案很简单,但我不确定它是什么。在此先感谢您的帮助!