ruby-on-rails - Rails/ERB 中的条件标记包装

标签 ruby-on-rails ruby erb

在 ERB 中,什么是最可读和/或最简洁的写法?编写我自己的方法并不可取,因为我想为此向我公司的其他人传播一个更清洁的解决方案。

<% @items.each do |item| %>
  <% if item.isolated? %>
    <div class="isolated">
  <% end %>

    <%= item.name.pluralize %> <%# you can't win with indentation %>

  <% if item.isolated? %>
    </div>
  <% end %>
<% end %>

==更新==

我使用了一个更通用的 Gal 答案版本,它与标签无关。

def conditional_wrapper(condition=true, options={}, &block)
  options[:tag] ||= :div  
  if condition == true
    concat content_tag(options[:tag], capture(&block), options.delete_if{|k,v| k == :tag})
  else
    concat capture(&block)
  end
end

== 用法

<% @items.each do |item| %>
  <% conditional_wrapper(item.isolated?, :class => "isolated") do %>
    <%= item.name.pluralize %>
  <% end %>
<% end %>

最佳答案

如果你真的希望 DIV 是有条件的,你可以这样做:

将其放入 application_helper.rb

  def conditional_div(options={}, &block)
    if options.delete(:show_div)
      concat content_tag(:div, capture(&block), options)
    else
      concat capture(&block)
    end
  end

然后你可以在你的 View 中这样使用:

<% @items.each do |item| %>
  <% conditional_div(:show_div => item.isolated?, :class => 'isolated') do %>
    <%= item.name.pluralize %>
  <% end %>
<% end %>

关于ruby-on-rails - Rails/ERB 中的条件标记包装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5809917/

相关文章:

ruby-on-rails - 在表单提交之前 Mechanize 检查所有单选按钮

mysql - 在 rails 4 中包含、加入和选择

ruby - 将一个 erb 文件包含到另一个文件中

mysql - 如何保证 Rails 中的 MySQL 锁获取顺序

ruby-on-rails - Ruby 2.2 在 Heroku 上有内存问题吗?

ruby-on-rails - ruby 无法在 .js.coffee 中的 coffeescript 之后进行 ajax 响应

javascript - 如何在 Rails 4 的 javascript 中包含 ruby​​ 变量?

jquery - Bootstrap-sass gem 无法为下拉菜单加载 js

ruby-on-rails - Active Record 的 'joins' 方法背后是什么?

css - Rails 7 不会在 `generate scaffold` 命令上生成 SCSS 文件