我想要一个具有相关值的对象。
这就是我想要做的事情:
@users = @search.results
@user_results = []
@users.each do |user|
@user_results = @user_results.push user << {photo_url: UsersPhoto.find_by_user_id(user.id).image_name}
end
我得到了:
NoMethodError(未定义方法`&lt;&lt;&#39; for#):
有没有办法做这样的事情?
答案 0 :(得分:0)
为什么不使用.pluck
方法?
@users = @search.results
@user_results = UsersPhoto.where(user_id: @users.pluck(:id) ).select(:image_name)
至少从我理解的内容来解释,你需要一个用于结果@users的image_names数组。所以只需获取它们的ID,找到那些与这些ID匹配的UsersPhotos,然后获取image_name列
答案 1 :(得分:0)
这就是协会的用途。您应该只为{1}}添加与{1}}相关联的关联,并使用User
。
UsersPhoto
如果做不到这一点,请在@user.users_photo.image_name
模型中添加class User < ActiveRecord::Base
has_one :users_photo
end
方法,该方法将photo_url
包裹起来:
User
,,你可以做你想做的事情,但是你需要在你的UsersPhoto.find...
模型中添加class User < ActiveRecord::Base
def photo_url
UsersPhoto.find_by_user_id(id).image_name
end
end
,你的语法是错了:
attr_accessor :photo_url