可以将键值附加到ActiveRecord对象

时间:2014-06-28 00:30:53

标签: ruby-on-rails ruby-on-rails-3 activerecord

我想要一个具有相关值的对象。

这就是我想要做的事情:

@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#):

有没有办法做这样的事情?

2 个答案:

答案 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