在轨,我经常碰到那里的意见里面,我会做这样的事情如果.html.erb else语句中的观点
<% if @some_condition_previusly_established_in_a_controller %>
<div class="one">123</div>
<% else %>
<div class="two">something else</div>
<% end %>
的情况下它看起来有点cluttery。这是一种可接受的处理意见的方式吗?
在轨,我经常碰到那里的意见里面,我会做这样的事情如果.html.erb else语句中的观点
<% if @some_condition_previusly_established_in_a_controller %>
<div class="one">123</div>
<% else %>
<div class="two">something else</div>
<% end %>
的情况下它看起来有点cluttery。这是一种可接受的处理意见的方式吗?
除非你能想办法重新写这个作为一个辅助方法,你基本上坚持了下来寻找一种丑陋。这就是ERB的原理,因为它旨在成为将Ruby注入纯文本模板的最小方式,而不是必须精简或优雅的东西。
好消息是语法高亮编辑器通常会让您的<% ... %>
ERB块在外观上与您的HTML看起来不同,因此可以显着提高可读性。
这也是为什么其他表示像HAML已创建如该语法是少了很多混乱:
- if some_condition_previusly_established_in_a_controller
.one 123
- else
.two something else
是的,这是标准(是的,它看起来很乱)。
如果你正在寻找一个可能更清洁的替代,退房:Conditional tag wrapping in Rails/ERB
对于一个或两个这样的条件逻辑在你的意见,我想它的罚款,但是当你的代码获取更大,你有多个if..else..end
,看起来“cluttery”,我认为你应该看看实施“Presenter模式”,通过将你的逻辑与演示者分开,大大清理你的视图。
这是我在Ryan Bates关于“从头开始演示模式”的Rails Casts系列中关注的一个很好的教程。 http://railscasts.com/episodes/287-presenters-from-scratch。
不错的链接,但对于我们这些没有付费帐户的人来说是不可见的。 =( –
是的,我只关心如果我发布了github源代码链接是否会违反版权法,我会尝试发布一个链接到源代码并编辑我的答案以包含必要的类和文件以查看如果它不追我:) – vee
它看起来像[情节287](https://github.com/ryanb/railscasts-episodes/tree/master/episode-287)至少在他的一个回购中公开。 –
你试过了吗?
<% @some_condition_previusly_established_in_a_controller ? <div class="one">123</div> : <div class="two">something else</div> %>
您可以将逻辑总是移动到控制器和离开视图干净(ER)。
控制器:
if @some_condition
@div_class = :one
@div_content = 123
else
@div_class = :two
@div_content = 'something else'
end
查看:
<div class="<%= @div_class %>"><%= @div_content %></div>
或使用助手:
<%= content_tag :div, @div_content, class: @div_class %>
如果您的视图包含大量的标签和HTML元素,你可以把它们变成部分和逻辑模型
查看:
<%= render :partial => @model.status %>
<%= render :partial => "file/path/#{@model.status}" %> # if your partial is in some different folder
如果你的状态是其中之一,那么它将使_one.html.erb
文件如果它是两个,然后它会自动呈现文件_two.html.erb。
型号:
def status
if @some_condition
"one"
else
"two"
end
end
您可以使用<% -%>避免空行被添加到生成的HTML代码。 –