我实现了一项功能,允许用户设置默认个人资料照片和相册封面照片。
我的数据库中有以下表格:
- 用户 - 有一个个人资料,有很多相册
- 个人资料 - 属于用户
- PhotoAlbum(s) - 属于用户,有很多照片
- 照片 - 属于相册
设置默认头像的操作是:
def set_default_profile_photo
photo = Profile.find_by_user_id(current_user.id)
photo.photo_id = params[:photo_id]
photo.save
redirect_to :back
flash[:success] = "Default photo set!"
end
这很好。
设置我的默认相册照片有点棘手:
def set_default_album_photo
photo = PhotoAlbum.where(:id => Photo.where(:id => params[:photo_id]).first.photo_album_id)
photo.first.photo_id = params[:photo_id]
photo.first.save
redirect_to :back
flash[:success] = "Default album photo set!"
end
这是无效的操作:
def set_default_album_photo
photo = PhotoAlbum.where(:id => Photo.where(:id => params[:photo_id]).first.photo_album_id)
photo.photo_id = params[:photo_id]
photo.save
redirect_to :back
flash[:success] = "Default album photo set!"
end
我让它工作了,未定义的 photo_id 方法
错误消失了,但那是在更改这些行之后:
photo.photo_id = params[:photo_id]
photo.save
到:
photo.first.photo_id = params[:photo_id]
photo.first.save
我不确定发生了什么,也不知道为什么这种改变使事情有效,并且想了解发生了什么。
最佳答案
我没有评论能力,所以我无法对上面的帖子发表评论,但我应该指出:
Foo.where(:id => X).first
与 Foo.find(X)
不同。如果没有 id = X 的记录,Foo.find(X)
将引发异常,而另一个将返回 nil。
关于ruby-on-rails - "first"在 Ruby 和 Rails 中有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8953144/