我试图在Stack上找到类似但没有运气的东西。
我希望得到max_by的相关性,只得到1个结果。
我将值存储在tmp
变量中,并且跟踪积压返回:
#<Object:0x007f89e852e1e8>
#<Object:0x007f89e852e030>
#<Object:0x007f89e852d6f8>
#<Object:0x007f89e852d400>
#<Object:0x007f89e852d018>
#<Object:0x007f89e852cde8>
#<Object:0x007f89e852cb68>
所以,我在tmp
变量中返回了7个对象,但是当我尝试执行max_by时:
def update
if params[:user_id].blank?
render json: "No user", status: 500
else
user = User.find_by_id(params[:user_id])
tmp = user.family.map(&:objects)
object1=tmp.max_by(&:relevance)
@hierarchy.update_column("top_hierarchy", object1.keyword)
render json: @hierarchy, status: 200
end
end
如上所述,我还尝试隔离循环中的每个对象(并得到相同的错误):
tmp.each do |my_object|
puts my_object.relevance
end
和tracelog:
NoMethodError (undefined method `relevance' for #<Object::ActiveRecord_Associations_CollectionProxy:0x007f89ed968ab0>):
以下是有关模型的一些信息
Object
是一个独立的模型,使用以下属性定义。
Family
属于用户,拥有family_objects
,这是一个包含Object
和Family
的映射表。
模特:
#FamilyObject attributes
FamilyObject(id: integer, family_id: 204, object_id: 303: integer)
#Family model
belongs_to :user
has_many :family_objects, class_name: 'Family::FamilyObject', dependent: :destroy
has_many :objects, through: :family_objects
#Object attributes
Object(id: integer, relevance: integer, keyword: string, created_at: datetime, updated_at: datetime, verified: boolean)
#Object Model
has_many :family_objects, class_name: 'Family::FamilyObject', dependent: :destroy
has_many :families, through: :family_objects
这可能很明显,但我不能说#39;搞清楚!
答案 0 :(得分:0)
您正在集合而不是单个对象上调用.relevance
。是否有可能有2个具有相同相关性的对象,因此它返回的是集合而不是单个对象?
答案 1 :(得分:0)
根据APIDock的说法,
Active Record中的关联代理是对象之间的中间人 持有该关联,称为@owner,以及实际 关联对象,称为@target。任何一种关联 代理是关于在@reflection中可用的。这是一个例子 class ActiveRecord :: Reflection :: AssociationReflection。
所以你正在做的是在关联对象上调用relevance
方法,而不是对象本身。
你可以尝试
object1 = tmp.max_by { |obj| obj.relevance }
这应该在每个对象上调用relevance
方法。
如果有效,请告诉我。