【问题标题】:Refactor view code to decorator using .each使用 .each 将视图代码重构为装饰器
【发布时间】:2013-11-17 21:33:56
【问题描述】:

我只是在学习如何使用 draper gem 将视图代码移动到装饰器中。我无法弄清楚如何将 .each 移动到装饰器中。

<% @project.users.each do |p| %>
    <small class="btn btn-mini">
        <%= link_to "#{p.first_name} #{p.last_name}", "mailto:#{p.email}" %>
    </small>
    <br>
<% end %>

我尝试了以下方法:

查看代码:

<%= @project.assigned_users %>

装饰器代码:

def assigned_users
    model.users.each do |p|
        h.content_tag :small, class: 'btn btn-mini' do
            h.link_to "#{p.first_name} #{p.last_name}", "mailto:#{p.email}"
        end
    end
end

结果是整个用户哈希而不是我正在寻找的 first_name last_name 按钮。也许 .each 不属于装饰器?任何帮助,将不胜感激。

【问题讨论】:

    标签: ruby-on-rails draper


    【解决方案1】:

    each 返回原始哈希。相反,您需要连接块的结果:

    def assigned_users
        model.users.map do |p|
            h.content_tag :small, class: 'btn btn-mini' do
                h.link_to "#{p.first_name} #{p.last_name}", "mailto:#{p.email}"
            end
        end.flatten.join.html_safe
    end
    

    【讨论】:

    • 成功了,谢谢。注意:我必须在最后一行 (end.flatten.join.html_safe) 添加.html_safe,这样它才能正确显示。
    猜你喜欢
    • 2021-05-28
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 2010-12-11
    • 2012-05-03
    相关资源
    最近更新 更多