我正在使用社交网站,用户可以阻止其他用户。在整个站点 - 几十个地方,显示用户信息。例如,用户评论,回复表格,在线用户列表等等。问题在于,如果显示用户信息的大量位置,则每次检查该用户是否被阻止变得非常困难。例如:
<g:each var="comment" in="${comments}">
<g:if test="!${loggedInUser.blockedUsers.find { it == comment.user}">
show comment
</g:if>
</g:each>
Grails是否提供任何有助于创建某种过滤器或拦截器的功能,我可以在迭代列表时简单地排除被阻止的用户等?如果没有,你会建议我做什么?
答案 0 :(得分:1)
一个好的经验法则是只加载您需要的内容,因此您的服务方法应该在数据库级别过滤掉被阻止的用户。然后你的控制器会更简单,视图只需显示它们的内容。
但如果您更喜欢拦截器,请看一下:
答案 1 :(得分:0)
可能会这样做:
<g:each var="comment" in="${comments.findAll { !(it in loggedInUsers.blockedUsers) }}">
show comment
</g:each>
但我认为在控制器中过滤你的评论会更有效率。你可能会对你的评论做一个Grails Criteria。
答案 2 :(得分:0)
也许Hibernate Filter插件可以帮到你?