在我的Ruby on Rails项目中,我使用上载器来处理带载波和minimagick的图像。通过我的网站,我确实使用了几次。但我想限制页面上的图像数量。因此,cms的用户不能上传例如主页上的2个以上的图像和联系页面上的3个图像。
On another answer I found限制,由模型引起。但我想确定每页的图像数量。所以在我看来,这只能在视图中完成每个页面单独处理它们。
显示图片的代码是:
<% for attachment in @page.attachments %>
<div class="painting">
<%= image_tag attachment.image_url if attachment.image? %>
<div class="name"><%= attachment.name %></div>
<div class="actions">
<%= link_to "edit", edit_attachment_path(attachment) %> |
<%= link_to "remove", attachment, :confirm => 'Are you sure?', :method => :delete %>
</div>
</div>
我也找到了这个
<%= image_tag attachment.image_url[0,1] if attachment.image? %>
仅显示例如第一张图片,但我不再工作了(这确实很奇怪)。
EDIT 在模特中使用:
page.rb
class Page < ActiveRecord::Base
attr_accessible :name, :title, :body, :image, :text1, :text2, :text3, :text4
has_many :attachments
end
event.rb
class Event < ActiveRecord::Base
attr_accessible :image, :name, :date, :description, :event_id
has_many :attachments
has_many :event_attendees
has_many :attendees, :through => :event_attendees, :source => :user
validates_presence_of :name, :date
end
attachment.rb
class Attachment < ActiveRecord::Base
IMAGE_SIZES = {
:default => [280, 480],
:mini => [300,900],
:home => [200, 100]
}
attr_accessible :event_id, :page_id, :name, :image, :remote_image_url, :size
belongs_to :event
belongs_to :page
mount_uploader :image, ImageUploader
end
答案 0 :(得分:0)
我看到的方式如下:
要保持用户体验,您需要存储无限制的附件,并限制模型级别的附件数量(在回调时)
加入模型
我在多态连接模型中有一个many-to-many
关系,如下所示:
#app/models/image.rb
Class Image < ActiveRecord::Base
has_many :image_pages
has_many :pages, through: :image_pages
end
#app/models/image_page.rb
Class ImagePage < ActiveRecord::Base
belongs_to :image
belongs_to :page
end
#app/models/page.rb
Class Page < ActiveRecord::Base
has_many :image_pages
has_many :images, through: :image_pages, limit: :page_limits
private
def page_limits
"3" # -> put page validation here
end
end
这将允许您将任意数量的图像与任意数量的页面相关联,也意味着您可以限制每页返回的图像
查看强>
您可以像这样调用图像:
#app/views/pages/show.html.erb
<% @page.images.each do |image| %>
<%= image.attachment.url %>
<% end %>
当然,您可以限制上传级别,但这会阻止用户拥有他们喜欢的尽可能多的图片。至少通过限制模型级别,您将能够拥有任意数量的图像
这是一个很好的参考资料:limit the number of objects returned in a has_many
答案 1 :(得分:0)
通过将图像从数组中取出来解决了我的问题。
<% image_tag @event.attachments[1].image_url %>
使用这段代码我可以选择例如图像2(0计数,所以这是第二张图像)。 该代码可在选择的视图中使用。