3用例和索引方法

时间:2009-01-21 16:16:05

标签: ruby-on-rails

我写下面的代码似乎不起作用,但如果我删除了 最后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 

2 个答案:

答案 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_galleryshowedit操作中的delete执行类似操作。

相关问题