0

我有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 张图片。他会选择一张图片作为他的头像。现在,用户可以上传图片,但我不知道如何限制图片的最大数量。还有一件事,用户需要能够更改他的头像图像。我怎样才能做到这一点?

在我看来,我使用带名称user[picture_attributes][0][image]的输入文件以允许用户更改第一张图片,但它会不断将新图片插入数据库而不是替换第一张图片。

请帮助我。

提前致谢

4

1 回答 1

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 来更新记录。如果您尝试在没有将 rails 指向该 ID 的情况下更新记录,则会假定您正在尝试创建新记录。
  2. 此外,您可以在用户个人资料中使用 user[picture_attributes][0][image] 而不是使用。查找特定图像并在编辑操作中指向该图像。

希望这可以帮助

于 2013-07-22T23:00:57.163 回答