我写下面的代码似乎不起作用,但如果我删除了 最后if语句,它确实有效,显然对于前两个用例 只要。有没有更好的方法来编写这段代码?在我的路线文件中我有
map.resources :galleries
map.resources :users, :has_many => :galleries
用户点击链接“画廊”并查看所有已发布的列表
画廊。
(mysite.com/galleries
)
用户可以点击链接“我的画廊”并查看她自己的所有内容
画廊。
(mysite.com/users/21/galleries
)
用户可以点击其他用户个人资料上的链接并查看
人们出版画廊。
(mysite.com/users/35/galleries
)
if params[:user_id].blank?
@galleries = Gallery.find(:all, :conditions => ['visibility_status= ?', true])
end
if (params[:user_id] && current_user.id.to_s == params[:user_id])
@galleries = current_user.galleries
end
if params[:user_id]
@galleries = Gallery.find(:all, :conditions => ['user_id=? and
visibility_status = ?', params[:user_id], true])
end
答案 0 :(得分:1)
好的 - 首先 - 我不是Ruby程序员。
但是 - 你不应该使用if - else if - else if - end,etc?
如果第二个条件为真,您的第三个条件将始终为真,因此即使您已经在第二个测试中设置了第三个测试,您仍然会覆盖@galleries
。
答案 1 :(得分:1)
您拥有的路线似乎合适,使用这些路线,您可以在控制器和视图中使用一堆辅助方法:例如user_galleries_url(@user)
和user_galleries_url(@user, @gallery)
等。看看resource routing你可以做些什么。
唯一的建议是稍微修改一下你的逻辑,然后把它放在前面的过滤器中app/controllers/galleries_controller.rb
class GalleriesController < ActionController::Base
before_filter :get_galleries, :only => 'index'
private
def get_galleries
if params[:user_id]
if params[:user_id] == current_user.id.to_s
@galleries = current_user.galleries
else
@galleries = Gallery.find(:all, :conditions => ['user_id=? and visibility_status = ?', params[:user_id], true])
end
else
@galleries = Gallery.find(:all, :conditions => ['visibility_status= ?', true])
end
end
end
您还可以对get_gallery
,show
和edit
操作中的delete
执行类似操作。