处理具有多个入口点的一个控制器的最佳做法是什么?

时间:2012-06-26 01:50:38

标签: ruby-on-rails-3

用户来我的应用程序输入他们拥有的卡片。卡片按问题组织,以便

Issue has_many Cards

所以我们的基本情况(1)是当用户登录并更新他的收藏时,他访问

/issues/{id}

哪次点击issues#show呈现issues\show.haml。在此页面上,他们可以从其收藏中输入或删除卡片。该页面有各种排序和按钮等...

我想公开(2)用户集合,以便其他人可以访问

/{username}/issues/{id}

这个页面会少得多,并且会显示与登录用户相关的其他信息,而不是卡片的所有者。显而易见的选择是在:issues下嵌套:users并使IssuesController#show处理所有内容。但是IssuesController#show已经处理了上述第一种情况。

一个实现是:

class IssuesController
    def show
         if(params[:user_id])
              #do something
         elsif
              #do and render something else
         end
    end
end

......但那看起来很可怕。此外,这是我们将在应用程序周围使用的概念,我讨厌污染所有类似的控制器。

处理这种情况的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

首发/issues/:id应由IssuesController#show而非#index

处理

您可以选择将/:user_id/issues/:id路由到您喜欢的任何控制器和操作。这不一定是最好的做法,所以选择你满意的东西。我会把它传递给类似IssuesController#show_for_user的东西,所以它很好而且清晰。