[英]Rails polymorphic association error
I'm having problems with a polymorphic association. 我在多态关联方面遇到问题。
A quick explanation about my project. 关于我的项目的简要说明。 You can see it here: majorfinder.com On my app there will be majors, schools, and careers.
您可以在这里查看:majorfinder.com在我的应用程序中,将会有专业,学校和职业。 I want to be able to add reviews for each.
我希望能够为每个评论添加评论。 Since I'm just starting out I'm just beginning with adding reviews for majors but creating the association so that when I get to the careers and schools the reviews association will go quickly.
因为我刚开始,所以我只是开始添加专业的评论,但是创建协会,以便当我进入职业生涯和学校时,评论协会会很快发展。
Here are my associations: 这是我的关联:
models/review.rb 型号/审查.rb
belongs_to :user
belongs_to :reviewable, polymorophic: true
models/user.rb 型号/user.rb
has_many :reviews
models/major.rb 型号/major.rb
has_many :reviews, as: :reviewable
My db schema for reviews looks like this: 我的评论数据库架构如下所示:
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
In my majors controller I've followed this railscast in order to create a url that looks like this www.majorfinder.com/majors/major-name. 在我的专业控制器中,我遵循了这个规则 ,以创建一个类似于www.majorfinder.com/majors/major-name的URL。 So part of my majors controller looks like this:
所以我的专业控制器的一部分看起来像这样:
def show
@major = Major.find_by_slug(params[:id]).includes(:reviews => :user)
end
In my majors show page I have: 在我的专业显示页面上,我有:
<% @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 %>
And lastly, here are my routes: 最后,这是我的路线:
resources :majors, has_many: :reviews
I'm getting the following error: 我收到以下错误:
NoMethodError in MajorsController#show
undefined method `includes' for #<Major:0x007f9466e001a8>
Here it is from the console: 这里是从控制台:
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'
Line 16 in the majors_controller.rb file is this one: majors_controller.rb文件中的第16行是这一行:
@major = Major.find_by_slug(params[:id]).includes(:reviews => :user)
Can you see what I'm missing or what I should change? 您能看到我所缺少的还是应该改变的? It seems like the solution is simple but I am not sure what it is.
看来解决方案很简单,但我不确定它是什么。 Thanks in advance for your help!
在此先感谢您的帮助!
I believe what you are trying to do is eager load :reviews
when you find the Major. 我相信您要寻找的是热门的
:reviews
。 You are close but your order is backwards. 您已经关闭,但您的订单是倒数。 It needs to be
它必须是
@major = Major.includes(:reviews => :user).find_by_slug(params[:id])
For more information on eager loading checkout this RailsGuides article. 有关渴望加载的更多信息,请参见RailsGuides文章。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.