Pat*_* A. 0 conditional ruby-on-rails
我有一个Rails 3应用程序,我使用了很多条件语句来改变页面的设计.为了拥有如此大量的条件,保持逻辑不在视图中的最佳做法是什么?
假设示例:
<% unless @ethos.blank? %>
<%= unless @work.nil? do %>
<%= link_to "Add Work", work_path %>
<% end %>
<%= @ethos.tagline %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
我在其他条件中有更多的条件.在一个视图中管理这个的最佳方法是什么?
您应该避免视图中的复杂条件(和大多数条件).将它们提取给帮助者,或者更好的是,将其提取给某种"演示者",以便您可以使用接收器而不是那些"全球寻找/感受帮助者"
SomeHelper
module SomeHelper
def work_link
(@ethos.present? && @work) ? link_to("Add Work", work_path) : nil
end
end
Run Code Online (Sandbox Code Playgroud)
视图
<%= work_link %>
<%= @ethos.tagline if @ethos.present? %>
Run Code Online (Sandbox Code Playgroud)
如果@ethos可能与nil空[]数组相反,您可以使用:
<%= @ethos.try :tagline %>
Run Code Online (Sandbox Code Playgroud)
另请注意,在原始视图中<%= unless @work.nil? do %>应该使用a -而不是a =.
哦,我鼓励你使用HAML而不是ERB.使用HAML,视图看起来像这样(更容易阅读,不是吗):
= work_link %>
= @ethos. try :tagline
Run Code Online (Sandbox Code Playgroud)
您的原始视图在HAML中看起来像这样(请记住,尽可能避免视图中的条件!)
- unless @ethos.blank?
- unless @work.nil? do
= link_to "Add Work", work_path
= @ethos.tagline
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
759 次 |
| 最近记录: |