Rails:在引用中呈现记录属性的最优雅方法

时间:2019-02-08 03:21:46

标签: ruby-on-rails

我有一个具有以下属性的@story记录:

  • 作者
  • author_title
  • source_link

我正在视图中渲染它,所以它看起来像这样:

  

詹姆斯·乔伊斯(作者),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或结尾的逗号。

2 个答案:

答案 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