我有一个具有以下属性的@story记录:
我正在视图中渲染它,所以它看起来像这样:
詹姆斯·乔伊斯(作者),1882年,Wikipedia
我希望有比这种方式更复杂的方法来生成DOM(这是不完善的,如下所述):
<%= @story.author %><% if !@story.author_title.blank? %> (<%= @story.author_title %>)<% end %><% if !@story.year.blank? %>, <%= @story.year %><% end %><% if !@story.source_link.blank? %>, <%= link_to @story.source, @story.source_link, target: "_blank" %><% end %>
由于所有字段都不是必填字段,因此我认为如果字段不是零则您可能需要一个逗号问题,因此我认为可以更好地处理它。例如,如果author
为空,则我不想显示author_title或结尾的逗号。
答案 0 :(得分:0)
您可以尝试以下代码
创建两个助手方法
def author_story(author)
[@story.author_title, @story.year].compact.join(',')
end
def author_link
link_to(@story.source_link, text: 'testing')
end
在视野中
<% if @story.author.present? %>
<div>
<span>
<%= author_story(@story) %>
</span>
<span>
<%= author_link(@story) %>
</span>
</div>
<% end %>
答案 1 :(得分:0)
请参阅我的评论,装饰器是必经之路。您将学会爱它,永不回头。
如果您认为仅执行一次简单的任务会产生过多的开销,则为此创建一个模型方法:
/web-inf/lib/
并在其后手动添加链接:
class Story < ApplicationRecord
.... #other stuff
def author_with_title_and_year
"#{author} #{author_title}, #{year}".squish
end
end