Rails:Hack / workaround:有没有办法在视图中间返回/(停止执行)?

时间:2014-01-10 07:56:04

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 ruby-on-rails-4 haml

编辑:请不要担心最佳做法。我正在寻找一个黑客。同样,我不想在团队中使用它。谢谢你的理解。

我有一个名为index.html.haml的视图文件

- if this.that?
  %div#if
    ....
    ....
- else
  %div#else
    ....
    ....

但我想这样做:

- if this.that?
  %div#if
    ....
    ....
    - return
%div#else
  .....
  .....

这可能吗?感谢

4 个答案:

答案 0 :(得分:4)

我知道用另一个问题回答问题是不礼貌的,但是:你有没有试过?

当然可以! ERB模板中的代码被评估为纯红宝石,因此您也可以在其中使用return。通常需要返回“某些内容”,例如return ''

虽然@meagar在评论中已经说过,但它并不被视为“最佳实践”。特别是如果你在模板或部分内部深入。这是非常糟糕的风格,你的同事会恨你。在这种情况下,面部冲击很常见。

有一段时间我在部分中使用return时没有像return if Rails.env.production?那样呈现,但这很少见,而且当它是部分中的第一行时也非常明显。

答案 1 :(得分:1)

在搜索了haml源代码后,我认为您正在寻找的是以下内容:

- return @haml_buffer.buffer

如果你需要.erb的同一个hack,你应该添加

<% return @output_buffer %>

将其中一个放入您的一个视图文件中,它将“刷新”所有已连接到缓冲区的内容。

答案 2 :(得分:1)

我认为你真的不需要“黑客”本身。您可能只需要 cells gem,因为这会在您呈现的视图的一部分中为您提供一个MVC的小单元格。

这很可能会以您尝试的方式处理Model-View-Presenter。 :)

答案 3 :(得分:0)

我喜欢细胞宝石的想法,但也许你必须,只需要包含一个

flash[:something] = this.that?

在控制器中并使用某些东西吸收dom中某个数据字段中的内容,以便您通过javascript执行逻辑。

:javascript
 $(document).ready(function(){
  var a  = $("h1").data("that")

如果==做某事?喜欢隐藏其他%div

 })