Polymorphic Association的未定义方法`type'。
My Polymorphic与模型关联,爸爸和妈妈在编写方法时会给我一个错误,看看用户是否已经关注其中一个。
以下是我的所有模型和方法following
,这就是问题所在。
模型
class User
has_many :follows
def following?(followable)
follows.where(followable_id: followable.id, followable_type: followable.type ).any?
end
end
class Mom
has_many :follows, as: :followable, dependent: :destroy
end
class Dad
has_many :follows, as: :followable, dependent: :destroy
end
控制器
@dad = Dad.find(params[:dad_id])
查看
<% unless current_user.following?(@dad) %>
<%= link_to({ controller: 'follows', action: 'create', id: @dad.id }, { method: :post }) do %>
Follow
<% end %>
<% end %>
错误
NoMethodError - undefined method `type' for #<Dad:0xaf63038>:
activemodel (4.0.2) lib/active_model/attribute_methods.rb:439:in `method_missing'
activerecord (4.0.2) lib/active_record/attribute_methods.rb:155:in `method_missing'
app/models/user.rb:17:in `following?'
.................
如果我摆脱followable_type
但这消除了该方法的原因,这是有效的。为什么会这样?
答案 0 :(得分:4)
这一行是问题
follows.where(followable_id: followable.id, followable_type: followable.type ).any?
将followable.type
替换为followable.class.name
type
曾经是class
的同义词,但已被弃用。即使它没有被弃用,你需要找到followable_type是类的名称而不是类本身的记录。
答案 1 :(得分:1)
@MaxWilliams是正确的,但如果你仍想使用type
,你只需要在模型中包含该方法
module Typeify
def type
self.class.name
end
end
class Mom
include Typeify
end
class Dad
include Typeify
end