Rails 4 - 如何根据当前路由显示同一控制器操作的不同视图?

时间:2014-04-29 10:13:50

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个带索引操作的标准帖子控制器。

目前,我将此广告作为主页/以及帖子页面/posts

class PostsController < ApplicationController

    def index
    # Logic and finds here
    end

end

在我的routes.rb文件中:

root to: "posts#index"
get "/posts" => "posts#index"

但是,在我看来,我想根据路线是/posts还是/来略微区别。这可能吗?如果是这样,那么最佳做法是什么?

我正在考虑在posts控制器中创建另一个动作,但后来我将复制已经在我的索引动作中定义的逻辑 - 我想避免使用它。

我基本上想要使用相同的内容,但显示不同的视图。

非常感谢任何建议或帮助。

谢谢, 迈克尔。

2 个答案:

答案 0 :(得分:3)

除了使用不同的控制器/操作之外,一种解决方案是从路由器传递一个额外的参数:

root to: "posts#index", source: 'home'
get "/posts" => "posts#index"

然后在你的控制器中你可以这样做:

class PostsController < ApplicationController
  def index
    # Logic
    render(params[:source] || 'index')
  end
end

当用户通过根路径输入时,它将呈现home模板,否则将呈现index模板。

答案 1 :(得分:1)

对于当前场景,您可以使用此

在你的行动中使用

request.fullpath

这将捕获当前的uri,你可以使用它来实现东西或者在rails 4中你也可以使用

request.original_url

要获取网址,this问题详细说明了用法