人类的逻辑是:
然后,这会用于告诉读者前端(包含漂亮的原始更新'或者更新'标签),了解原始新闻报道是否或如何更新自它首次出版,如果你真的对一个故事感兴趣,这很重要。
所以... 1)以下逻辑有效,但上半部分似乎非常混乱。你如何在一个==数组中包含三种可能性?
<% if @articleupdates.blank? && @article.status == "published" %>
<% elsif @articleupdates.blank? && @article.status == "editing" %>
<% elsif @articleupdates.blank? && @article.status == "draft" %>
<% elsif @articleupdates.blank? && @article.status == 'updated' %>
<div class="alert-update"><span class="updated-label">ORIGINAL UPDATED</span></div>
<% else %>
<div class="alert-update"><span class="updated-label">UPDATES ADDED</span></div>
<% end %>
并且... 2)虽然上述工作,但有任何简单的方法可以做到这一点......
IF original-article updated AND additional-updates not added, print 'original updated'
ELSIF original-article not updated AND additional-updates added, print 'updates added'
ELSIF original-article updated AND additional-updates added, print both 'original updated' AND 'updates added'
ELSE don't print anything
或者也许:
IF original-article updated, print 'original updated'
ELSIF additional-updates added, print 'updates added'
ELSIF original-article updated AND additional-updates added, print both 'original updated' AND 'updates added'
ELSE don't print anything
??我认为缺少的是:@articleupdates.blank?
的反面是什么?
更新以下kj的快速回答。更简单的版本现在几乎可以使用了:
<% if @articleupdates.present? %>
UPDATES ADDED
<% elsif @article.status == "updated" %>
ORIGINAL UPDATED
<% elsif @articleupdates.present? && @article.status == "updated" %>
UPDATES ADDED + ORIGINAL UPDATED
<% else %>
<% end %>
第三部分由于某种原因无效:<% elsif @articleupdates.present? && @article.status == "updated" %>
答案 0 :(得分:2)
在你达到第三个条件之前,你会抓住status == "updated"
。将它移到顶部,因为它是最复杂的条件。
<% if @articleupdates.present? && @article.status == "updated" %>
UPDATES ADDED + ORIGINAL UPDATED
<% elsif @articleupdates.present? %>
UPDATES ADDED
<% elsif @article.status == "updated" %>
ORIGINAL UPDATED
<% end %>
修改强>
# Article model
def updated?
status == 'updated'
end
# article helper
def article_label(article)
if article.newsitems.present? && article.updated?
label = "UPDATES ADDED + ORIGINAL UPDATED"
elsif article.newsitems.present?
label = "UPDATES ADDED"
elsif article.updated?
label = "ORIGINAL UPDATED"
end
content_tag :div, content_tag(:span, label, class: 'updated-label'), class: 'alert-update'
end
装饰师也会工作我猜...:)
答案 1 :(得分:1)
您的代码包含以下反模式:
@articleupdates.blank?
(DRY)首先在模型中创建方法:
def published?
status == "published"
end
#etc...
然后我建议你使用像draper
这样的宝石创建一个演示者class ArticleDecorator < Draper::Decorator
delegate_all
def publication_status
if newsitems.present?
if updated?
"UPDATES ADDED + ORIGINAL UPDATED"
else
"UPDATES ADDED"
end
elsif updated?
"ORIGINAL UPDATED"
else
""
end
end
end
在你的控制器中:
@article = @article.decorate
最后在您看来:
<div class="alert-update"><span class="updated-label"><%= @article.publication_status %></span></div>