dsp*_*099 40 ruby model-view-controller ruby-on-rails
在rails中,我经常会遇到这样的情况:在视图中我会做类似的事情
<% if @some_condition_previusly_established_in_a_controller %>
<div class="one">123</div>
<% else %>
<div class="two">something else</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
它看起来有点乱.这是否是一种可接受的观看方式?
tad*_*man 22
除非你能想出一种方法来重新编写这个作为辅助方法的方法,否则你基本上看起来很难看.这就是ERB的方式,因为它是将Ruby注入其他纯文本模板的最小方式,而不是必须简化或优雅的东西.
好消息是语法高亮的编辑器通常会使您的<% ... %>ERB块看起来与HTML在视觉上不同,因此可以显着提高可读性.
这也是为什么像HAML这样的其他表示被创建的地方,其语法不那么杂乱:
- if some_condition_previusly_established_in_a_controller
.one 123
- else
.two something else
Run Code Online (Sandbox Code Playgroud)
对于你的视图中的一个或两个这样的条件逻辑,我猜它很好但是当你的代码变大并且你有多个if..else..end并且看起来"杂乱"时,我认为你应该看看实现"Presenter Pattern",它通过分离来大大清理你的视图你对演示者的逻辑.
这是我在Ryan Bates的Rails Casts系列中关于"从头开始的Presenter Patterns"的精彩教程. http://railscasts.com/episodes/287-presenters-from-scratch.
你有没有尝试过?
<% @some_condition_previusly_established_in_a_controller ? <div class="one">123</div> : <div class="two">something else</div> %>
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您的视图包含很多标记和HTML元素,则可以将它们放入部分中,并将逻辑放入模型中
视图:
<%= render :partial => @model.status %>
<%= render :partial => "file/path/#{@model.status}" %> # if your partial is in some different folder
Run Code Online (Sandbox Code Playgroud)
如果您的状态为1,则它将呈现文件_one.html.erb
如果为2,则它将自动呈现文件_two.html.erb。
模型:
def status
if @some_condition
"one"
else
"two"
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
79386 次 |
| 最近记录: |