Rails别名在routes.rb中

时间:2013-06-15 22:10:41

标签: ruby-on-rails ruby

这是在我的routes.rb文件中:

  resources :users, :only => [:create] do
    get 'search'
    member do
      get 'images'
      get 'followers'
      get 'following'

      post 'follow'
      delete 'follow'
    end
  end

但我也希望有人能够调用/ self / feed和/ self / comments(其中comment是一种资源)以及self引用会话中的id。我怎么能不重复自己呢?

由于

1 个答案:

答案 0 :(得分:0)

如果id已经在会话中,那么您不需要将其作为URL参数传递。考虑传递会话ID的危险:如果传递了不是会话ID 的id 会发生什么?你会怎么处理?

对于你的评论路线,你应该考虑这样的事情:

# config/routes.rb
resources :comments

然后,在评论控制器中,您将查询id为session的所有评论:

# app/controllers/comments_controller.rb
def index
    @comments = User.find(session[:id]).comments // assuming that the session `id` variable is the identifier for a `User` model
end

因此,您只需访问/comments路径,即可访问会话的所有注释。

编辑:

要通过别名路径/self/comments访问会话的用户评论,您可以创建一个命名匹配路由:

# config/routes.rb    
match 'self/comments' => 'user#self_comments'

然后,您需要为comments_controller.rb self_comments添加操作。您可以重复使用您的评论index.html.erb模板来渲染结果:

# app/controllers/comments_controller.rb
def self_comments
    @comments = User.find(session[:id]).comments
    render :template => 'comments/index'
end