我正在尝试编写if else语句,以便当用户发布照片时,只显示照片,视频也是如此。现在,如果用户发布视频,则视频下方也会显示空白照片。我的代码如下。我知道它与这些线有关:
<%= image_tag @post.image.url(:medium) %>
<%= video_tag @post.video.url(:medium), controls: true, type: "video/mp4" %>
我只是不知道最好的方法是只显示用户发布的那个。
发表/ Show.html
<div class="row">
<div class="col-md-offset-4 col-med-8">
<div class="panel panel-default">
<div class="panel-heading center">
<%= image_tag @post.image.url(:medium) %>
<%= video_tag @post.video.url(:medium), controls: true, type: "video/mp4" %>
</div>
<div class="panel-body">
<p><%= @post.description %></p>
<p><strong><%= @post.user.name if @post.user %></strong></p>
<% if @post.user == current_user %>
<%= link_to edit_post_path(@post) do %>
<span class="glyphicon glyphicon-edit"></span>
Edit
<% end %>
<% end %>
<%= link_to 'Back', posts_path %>
</div>
</div>
表格
<%= form_for @post, html: { multipart: true } do |f| %>
<% if @post.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>
<ul>
<% @post.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :image %>
<%= f.file_field :image %>
</div>
<div class="field">
<%= f.label :video %>
<%= f.file_field :video %>
</div></br>
<div class="field">
<%= f.label :description %>
<%= f.text_field :description %>
</div>
<div class="actions">
<%= f.submit class: "btn btn-danger btn-md" %>
</div>
<% end %>
答案 0 :(得分:1)
如果我理解正确,你可以试试这个......
<% if @post.respond_to?(:image) %>
<%= image_tag @post.image.url(:medium) %>
end
<% if @post.respond_to?(:video) %>
<%= image_tag @post.video.url(:medium), controls: true, type: "video/mp4" %>
end
您基本上是在检查特定属性的存在。你说,如果它在这里,如果它存在,那么显示它。
或者你可以试试这个
<% if @post.image.url != nil %>
<%= image_tag @post.image.url(:medium) %>
.........(repeat for other attributes)
<% end %>
或者
<% unless @post.image.url == nil %>
<%= image_tag @post.image.url(:medium) %>
<% end %>
请参阅 here了解详情。
有很多方法可以达到你想要的效果。这种事情是编程的基本概念之一。