如何解决如何使用 Ruby 动态创建 HTML 文件?
问题说明
我有一个逻辑(在我的视图文件中的 if 语句),我会将它移到帮助程序中。我发现有一种方法可以将 ruby 文件中的代码转换为纯 HTML,如下所示:
fileHtml.puts "<h6> Upcoming event: </h6>"
示例
module UsersHelper
def check_upcoming_event(event)
<% if event.date > Time.Now %>
<div class="m-1">
<div class="border border-secondary p-2 m-3">
<h6> Upcoming event: </h6>
<p><strong>Event Description:</strong> <%= event.description %></p>
<p><strong>Event Start Date and Time:</strong> <%= event.date %></p>
</div>
</div>
<% else %>
<div class="m-1">
<div class="border border-secondary p-2 m-3">
<h6> PrevIoUsly attended event: </h6>
<p><strong>Event Description:</strong> <%= event.description %></p>
<p><strong>Event Start Date and Time:</strong> <%= event.date %></p>
</div>
</div>
<% end %>
end
结束
现在,我如何将数组的元素应用到 HTML 中,这是如何完成的?
fileHtml.puts "<p><strong>Event Description:</strong>" event.description fileHtml.puts "</p>"
我试图这样做,但它给出了错误
module UsersHelper
def check_upcoming_event(event)
if event.date > Time.Now
fileHtml.puts "<p><strong>Event Description:</strong>" event.description fileHtml.puts "</p>"
end
end
end
解决方法
我找到了一些东西,但不是我想要的。
基本上,它只返回嵌套 :div 中的最后一个字符串
module UsersHelper
def check_upcoming_event(event)
if event.date > Time.now
content_tag :div,:class => "m-1" do
content_tag :div,:class => "border border-secondary p-2 m-3" do
tag.h6 "Upcoming event:"
content_tag(:p,event.description)
content_tag(:p,event.date)
end
end
else
content_tag :div,:class => "border border-secondary p-2 m-3" do
content_tag(:h6,"Previously attended event:")
content_tag(:p,event.date)
end
end
end
end
有关使用 content_tag 在 Ruby 文件中创建 HTML 代码的详细指南,请访问此 link。
更新
您可以按如下方式使用 concat,但请注意只能与带括号的 content_tag 一起使用:
concat(content_tag(:div,class: "col-md-2") do
if opinion.author.photo.attached?
tag("img",src: url_for(opinion.author.photo),class: ["img-80","rounded"])
end
end)
concat(content_tag(:div,class: "col-md-10") do
# another set of code block
end)
,
您将 ruby 放入视图以创建动态生成的 HTML。您可以在其中放置循环、if 语句和任何 ruby 代码。
将文件命名为 <action>.html.erb
,其中 <action>
是控制器操作的名称(即 index.html.erb
)。
在文件中,您可以将 ruby 与 <% %>
一起使用,并使用 <%= %>
打印 ruby。
这是一个 if 语句:
<% if event.date > Time.now %>
<div class="m-1">
<div class="border border-secondary p-2 m-3">
<h6> Upcoming event: </h6>
<p><strong>Event Description:</strong> <%= event.description %></p>
<p><strong>Event Start Date and Time:</strong> <%= event.date %></p>
</div>
</div>
<% else %>
<div class="m-1">
<div class="border border-secondary p-2 m-3">
<h6> Previously attended event: </h6>
<p><strong>Event Description:</strong> <%= event.description %></p>
<p><strong>Event Start Date and Time:</strong> <%= event.date %></p>
</div>
</div>
<% end %>
这是一个循环:
<% events.each do |event| %>
<% if event.date > Time.now %>
...
<% else %>
...
<% end %>
<% end %>
您通常应该为较小的代码保留帮助程序。例如,我通常包含一个名为 amer_date
的帮助程序,它接受一个 ruby Date 对象并将其转换为格式为 3/7/2020
的字符串。这是一行代码 date.strftime('%-m/%-d/%Y')
,但我经常使用它,因此值得使用帮助程序。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。