我尝试创建一个帮助方法,如果用户尚未提交任何帖子并显示他们拥有的帖子数量,则会在用户的个人资料展示视图中显示<%= render @user.posts %>
。目前在我的节目视图中我有<div class="media">
<%= render partial: 'votes/voter', locals: { post: post } %>
<div class="media-body">
<h4 class="media-heading">
<%= link_to post.title, topic_post_path(post.topic, post) %>
<%= render partial: "labels/list", locals: { labels: post.labels } %>
</h4>
<small>
submitted <%= time_ago_in_words(post.created_at) %> ago by <%= post.user.name %> <br>
<%= post.comments.count %> Comments
</small>
</div>
</div>
,当提交0个帖子时,它不会显示任何内容。
帖子的部分是:
def no_post_submitted?(user)
user.post.count(0)
"{user.name} has not submitted any posts yet."
end
我试过了:
<%= if no_post_submitted?(@user) %>
<%= render @user.posts %>
在我的用户展示视图中:
- (void)moveXrightAnimation {
CABasicAnimation* theAnimation = ...
[theAnimation setValue:@"movexright" forKey:@"animationID"];
//animation
}
- (void)rotate90leftAnimation {
CABasicAnimation* theAnimation = ...
[theAnimation setValue:@"rotate90left" forKey:@"animationID"];
//animation
}
- (void)moveXpointAnimation {
CABasicAnimation* theAnimation = ...
[theAnimation setValue:@"movexpoint" forKey:@"animationID"];
//animation
}
- (void)scaleAnimation {
CABasicAnimation* theAnimation = ...
[theAnimation setValue:@"scale" forKey:@"animationID"];
//animation
}
#pragma mark - CAAnimationDelegate
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
if([[anim valueForKey:@"animationID"] isEqual:@"movexright"]) {
[self rotate90leftAnimation];
}
if([[anim valueForKey:@"animationID"] isEqual:@"rotate90left"]) {
[self moveXpointAnimation];
}
if([[anim valueForKey:@"animationID"] isEqual:@"movexpoint"]) {
[self scaleAnimation];
}
}
我不确定是错的,但我不知道如何实现这个方法。
答案 0 :(得分:3)
使用render @user.posts
的地方,您只需添加一个简单的条件:
<% if @user.posts.empty? %>
<p><%= @user.name %> has no submitted posts</p>
<% else %>
<%= render @user.posts %>
<% end %>
除非您需要在多个地方使用它,否则为此创建帮助没有多大意义。
答案 1 :(得分:1)
如果集合为空,则渲染集合返回nil,因此您可以使用||操作者:
<%= render @user.posts || "{@user.name} has not submitted any posts yet." %>
或者,如果有更多代码呈现另一个部分:
<%= render @user.posts || render 'no_posts' %>
答案 2 :(得分:0)
在Ruby方法中自动返回最后一个值,所以这个方法:
warning: string literal in condition
将始终返回一个字符串 - 如果在条件中使用字符串文字,则会使用警告count
将其评估为true。这也不是你使用def no_post_submitted?(user)
user.posts.empty?
end
的方式 - 传递0会导致它在第0列上查询或只是错误。
所以要修复你要做的方法:
<%= if user.post.any? %>
<%= render @user.posts %>
<% else %>
<%= "{user.name} has not submitted any posts yet." %>
<% end %>
然而,条件是如此简单,以至于它并不真正保证辅助方法。相反,你只需写:
.sq-ui-ban {
background-color: #abacb1;
color: black;
width: 1000px;
height: auto;
overflow: hidden;
font-style: normal;
font-family: Calibri;
font-size: 20px;
font-weight: normal;
position: relative;
}
.moreBan {
position: fixed;
cursor: pointer;
font-family: Calibri;
background: #1c94c4;
text-align: center;
color: #FFFFFF;
border: none;
font-size: large;
padding: 5px;
position: absolute;
bottom: 0px;
right: 0px;
}
答案 3 :(得分:0)
您的解决方案存在一些问题。请记住,rails更多地是关于约定优于配置。
您的方法no_post_submitted?
实际应该返回true/false
,因为它的方法以?
结尾。另外,为了清楚起见,它应该被命名为no_posts_submitted?
。看起来应该是这样的:
def no_post_submitted?(user)
user.posts.count > 0
end
然后,应该有另一个帮助方法来打印您所需的消息,例如:
def no_posts_message(user)
"{user.name} has not submitted any posts yet."
end
最终你可以像这样插入它:
<% if no_posts_submitted?(user) %>
<%= no_posts_message(user) %>
<% else>
<%= render @user.posts %>
<% end %>
答案 4 :(得分:0)
根据docs:
如果集合为空,渲染将返回nil,因此提供替代内容应该相当简单。
<h1>Products</h1> <%= render(@products) || "There are no products available." %>
-
因此...
<%= render(@user.posts) || "#{@user.name} has not submitted any posts yet." %>