我有三个模型,我正在尝试让各个团队中的人员与产品相关联。
产品
class Product < ActiveRecord::Base
mount_uploader :photo, ImageUploader
has_one :team
end
队
class Team < ActiveRecord::Base
has_many :persons
belongs_to :product
end
人
class Person < ActiveRecord::Base
mount_uploader :photo, ImageUploader
belongs_to :team
end
当我尝试这个电话时
@product = Product.find_by(name: params[:name])
if @product.team.count > 0
@team = @product.team.persons
end
我得到了
NoMethodError (undefined method `count' for #<Team:0x90dc098>):
答案 0 :(得分:3)
NoMethodError(Team的未定义方法`count':0x90dc098)
count
适用于ActiveRecord::Relation
数组。此处find_by
返回单个记录而不是ActiveRecord::Relation
。将find_by
更改为where
应该有效。
@product = Product.where(name: params[:name]).first
if @product.team.count > 0
@team = @product.team.persons
end
答案 1 :(得分:1)
您申请的计数功能不是数组,因此您会收到该错误。你可以这样做:
@product = Product.find_by(name: params[:name])
if @product.team.present?
@team = @product.team.persons
end
或使用Pavan提到的where子句
答案 2 :(得分:1)
只需添加额外的内容(.try
):
@product = Product.find_by name: params[:name]
@team = @product.try(:team).try(:persons) #-> returns false if team or persons nil
然后在前端使用一些条件逻辑:
<% if @team %>
...这与你现在的模式基本相同。