在 Rails 中创建主观视图的好方法是啥?

Posted

技术标签:

【中文标题】在 Rails 中创建主观视图的好方法是啥?【英文标题】:What's a good way to create subjective views in Rails?在 Rails 中创建主观视图的好方法是什么? 【发布时间】:2014-03-19 10:16:49 【问题描述】:

我想知道构建“主观”视图的 Rails Way™ 是什么,即根据提供的参数更改输出的视图。

例如,考虑以下人为的案例:

用户在博客应用中请求article。在请求中,她发送参数time_zone=(-)1,以表明她的时区是-1。然后应用程序应采用该参数,并在输出中返回文章和创建该文章的时间 - 转换为 她的时区

这种服务器端处理方法的基本原理是,很容易更改客户端视图,尤其是在通过公开(移动)api 访问 rails 应用程序的情况下。 (请注意,使用客户端脚本等处理上述情况是没有问题的,但我想避免这种情况。)

不知何故,我觉得这很容易属于model,如果不是因为params 在那里不可用。我想这是有原因的。 Controller 是,从我的角度来看,绝对不是坚持这个的地方。

问题是:我应该把这个逻辑塞进view吗?

【问题讨论】:

看看this question 感谢@Slicedpan,感谢您的帮助。不幸的是,我对时区本身并不真正感兴趣。这只是我的例子。它可以是任何东西,真的。问题更多的是“在哪里”而不是“如何”。 写答案atm 【参考方案1】:

这种逻辑可能最适合控制器的子类。这个子类可以定义一个过滤器方法来设置适当的实例变量,然后你可以在你的视图中引用它。我链接到一个与您的时区示例完全相同的问题(尽管没有数字时区偏移,但想法是相同的)。另一个示例可能是基于 URL 参数的不同 UI。在那种情况下,我可能会这样做:

class ApplicationController
  before_filter :set_ui
  private
    def set_ui
      if params[:ui] == 'blah'
        @ui = 'blah'
      else
        @ui = 'thing'
      end
      true
    end
end

那么在你看来,你可以有这样的东西:

<%= render :partial => @ui %>

那么您创建为ApplicationController 的子类的任何控制器都将具有此功能

【讨论】:

不错!谢谢 - 我没有那样想。 :)

以上是关于在 Rails 中创建主观视图的好方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在没有索引视图的情况下,在 SQL Server 中创建复杂视图的最佳方法是啥?

使用以下数据库布局在 mysql 中创建视图的最佳方法是啥?

Rails:在父模型的视图中创建一个 has_one 模型?

用 SnapKit 构建堆叠视图的好方法是啥

在 Rails 中处理视图和仅帮助程序常量的最佳方法

Rails:分离两个非常相似的视图的最佳方法是啥?