限制图像数量 - 回形针

时间:2013-07-22 14:57:12

标签: ruby-on-rails ruby paperclip polymorphism

我的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]的输入文件,以允许用户更改第一张图片,但它会不断将新图片插入数据库,而不是替换第一张图片。

请帮我解决这个问题。

提前致谢

1 个答案:

答案 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对于问题的第二部分,提出了一些建议:

  1. 您可以尝试在用户模型中访问图片的ID。这样,当您尝试指向要用作头像的图像时,rails会使用该ID更新记录。如果您尝试更新记录而不指向该ID,则会假设您正在尝试创建新记录。
  2. 您也可以在用户个人资料中使用用户[picture_attributes] [0] [image]。查找特定图像并在编辑操作上指向该图像。
  3. 希望这有帮助