我的User
模型具有以下关联:
class User < ActiveRecord
has_many :pictures, :as => :imageable
accepts_nested_attributes :pictures
end
我的Picture
模型如下所示:
class Picture < ActiveRecord
belongs_to :imageable, :polymorphic => true
has_attached_file :image
end
现在,我希望用户能够上传最多5张图片。他将选择1张图片作为他的头像。现在,用户可以上传图片,但我不知道如何限制最大图片数量。还有一件事,用户需要能够改变他的头像图像。我怎样才能做到这一点?
在我看来,我使用名为user[picture_attributes][0][image]
的输入文件,以允许用户更改第一张图片,但它会不断将新图片插入数据库,而不是替换第一张图片。
请帮我解决这个问题。
提前致谢
答案 0 :(得分:1)
对于你遇到的第一部分问题,我建议你使用rails内置的counter_cache方法。
您的图片模型将因此变为:
class Picture < ActiveRecord::Base
belongs_to :imageable, :polymorphic => true, counter_cache: true
has_attached_file :image
end
此外,您还需要向User模型添加名为pictures_count的列。
这种方式在您的控制器中,您可以检查计数是否最多5条记录,因此通知他们已经上传了允许的最大值。
if @user.pictures.size == 5 #sorry no more uploads
问题的第二部分。表单操作是指向新/创建操作还是更新操作。如果指向新操作,则会创建新记录,但如果指向更新操作,则应该按预期更改第一个图像记录。
@charinten对于问题的第二部分,提出了一些建议:
希望这有帮助