【问题标题】:Rails 4 - How do I show a different view for the same controller action, based on the current route?Rails 4 - 如何根据当前路线为同一控制器操作显示不同的视图?
【发布时间】:2014-04-29 10:13:50
【问题描述】:

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

目前,我将其路由为主页/,以及帖子页面/posts

class PostsController < ApplicationController

    def index
    # Logic and finds here
    end

end

在我的routes.rb 文件中:

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

但是,在我看来,我想根据路线是/posts 还是只是/ 来稍微改变一下布局。这可能吗?如果是这样,最好的做法是什么?

我正在考虑在帖子控制器中创建另一个操作,但随后我将复制已经在我的索引操作中定义的逻辑 - 我想避免这种情况。

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

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

谢谢, 迈克尔。

【问题讨论】:

  • 虽然有可能,但我认为如果您对这些路线使用单独的操作,它会更具可读性等。您可以将 index 操作中的逻辑放在控制器中单独的私有方法中。

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


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

    对于当前场景你可以使用这个

    在你的行动中使用

    request.fullpath
    

    这将捕获当前的uri,您可以使用它来实现事物或在rails 4中您也可以使用

    request.original_url
    

    获取网址,this问题详细解释了使用

    【讨论】:

    • current_page? 方法不可用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多