【发布时间】:2011-03-06 04:19:58
【问题描述】:
我很想获得一些关于我最近一直在编写的代码的意见。
我有一个模型,photos,它有时(但不总是)属于collection。我有一个页面供用户管理收藏,他们可以将任何未分配的照片添加到收藏中或从收藏中删除照片。
这是一个“编辑多个”情况,所以我创建了两个新的控制器操作:select,处理 GET 请求和视图,assign,处理来自选择视图中复选框的 PUT 请求。
因为用户可以将照片添加到收藏夹或从收藏夹中删除照片,所以我的 assign 操作中有一个条件,它看起来像这样:
def assign
@photos = Photo.find(params[:photo_ids])
case params[:assignment]
when 'add'
@photos.each do |p|
p.collection = @collection
p.save!
end
notice = "Photos added to collection."
when 'remove'
@photos.each do |p|
p.collection = nil
p.save!
end
notice = "Photos removed from collection."
end
redirect_to select_collection_photos_path(@collection), :notice => notice
end
这完全符合预期。但是,我对此感到不舒服,它似乎不符合“Rails Way”。
其他 Rails 开发者,当你遇到这种情况时,你会像我一样处理吗?您会将其拆分为两个控制器操作(即add_to_collection 和remove_from_collection),还是将其移至模型?如果你要将它移到模型上,那会是什么样子?
如果有任何建议和反馈,我将不胜感激。谢谢!
【问题讨论】:
-
如果用户选择一个新的复选框,取消选择之前选择的复选框,然后保存会发生什么? “添加”和“删除”在哪里设置?
-
它们是同一视图中的两种不同形式,它们有一个隐藏字段,用于指定是否应将给定 id 的照片添加到集合中或从集合中删除。
标签: ruby-on-rails ruby-on-rails-3 model controller