How do I use a ruby on rails find method in my view or is that bad practice?
所以我实现了一个功能,允许用户设置默认的个人资料照片和默认的相册封面照片。
现已完成这些功能:
我的数据库中有以下表格:
用户(有一个个人资料,有很多相册)
个人资料(属于用户)包含 photo_id
相册(属于用户,有很多照片)包含 photo_id
照片(属于相册)
显示用户默认照片很简单。
我现在无法显示用户的默认相册照片。
这是我显示用户默认个人资料照片的方式:
用户控制器:
1 2 | default_profile_photo_id = current_user.profile.photo_id @default_photo = Photo.find(default_profile_photo_id) |
用户视图显示模板:
1 | <%= link_to image_tag(@default_photo.image, :width =>"200"), @user.username %> |
目前对于相册的默认照片,我会显示该相册中的第一张照片:
1 2 3 4 5 6 | <% for photo_album in @photoalbums %> <%= link_to photo_album.album_title, photo_album %> <%= link_to image_tag(photo_album.photos.first.image, :width =>"100"), photo_album %> <%= link_to"Edit Album", edit_photo_album_path(photo_album) %> <%= photo_album.photos.size %> <% end %> |
相关控制器动作:
1 2 3 | def index @photoalbums = PhotoAlbum.find_all_by_user_id(current_user.id) end |
我需要做的是在 for 循环期间,从照片表中拉出一行,该行的 id 与循环当前正在循环的相册的 photo_id 相匹配,以便在我的索引模板上我可以从中拉出图像匹配的照片行并显示它。
我尝试了无数的解决方案,但都没有奏效..
我觉得我需要一位经验丰富的程序员的帮助。
亲切的问候
相册型号:
1 | belongs_to :photo |
视图:
1 | image_tag(photo_album.photo(photo_album.photo_id).image |
受 Frederick Cheung 评论启发的非常非常简单的修复。
执行此操作的一种有效方法是将 default_photo 添加到您在保存时设置为第一张照片的相册。
1 2 3 4 5 6 7 8 9 10 11 12 | class PhotoAlbum belongs_to :user has_many :photos belongs_to :default_photo before_save :set_default_photo protected def set_default_photo self.default_photo = self.photos.first end end |
然后在您的控制器中,您可以在查询中包含默认照片。
1 2 3 | def index @photo_albums = current_user.photo_albums.include(:default_photo) end |
这样,在您调用