Ruby on rails 如何显示<;p>;在rails html.erb中,若每个条件中的任何一个都为真,则仅此一次
在my html.erb文件中:Ruby on rails 如何显示<;p>;在rails html.erb中,若每个条件中的任何一个都为真,则仅此一次,ruby-on-rails,ruby,each,Ruby On Rails,Ruby,Each,在my html.erb文件中: <% @user.relationships.each do |relationship| %> <% if relationship.status == "requested" %> <p>You have friend requests from: </p> <%= User.find(relationship.followed_id).name %> 您的好友请求来自:
<% @user.relationships.each do |relationship| %>
<% if relationship.status == "requested" %>
<p>You have friend requests from: </p>
<%= User.find(relationship.followed_id).name %>
您的好友请求来自:
问题是,如果有匹配项,我只想显示一次您的好友请求:,而当前它每次都显示一次status==“requested” 我建议如下:
<% requested = @user.relationships.where(status: 'requested') %>
<% if requested.any? %>
<p>You have friend requests from: </p>
<% requested.each do |relationship| %>
<%= User.find(relationship.followed_id).name %>
您的好友请求来自:
因为您似乎加载了所有对象,所以让我们在ruby中这样做,否则这应该使用作用域来完成
在您的模型中:
def requested?
status == 'requested'
end
在控制器中:
@relationships = @user.relationships.includes(:followed)
@requested_relationships = @relationships.select &:requested?
在你看来:
<% if @requested_relationships.any? %>
<p>You have friend requests from: </p>
<% @requested_relationships.each do |relationship| %>
<%= relationship.followed.name %>
您的好友请求来自:
编辑以防止n+1查询您应该创建不在中的范围的范围。作用域看起来更像:
scope:requested,->{where(status:'requested')}
它仍然不是作用域。在ActiveRecord关系上调用#select
时,它会将每个记录作为ActiveRecord实例数组加载到内存中。使用上面我的建议这样的作用域会延迟加载记录。再次阅读我的答案,我明确地说我在ruby中这样做,因为op似乎想要所有关系,行不需要在each循环之外吗?哦,我想你需要将ser.relations.each do | relationship |更改为@requested|relationships.each。。。也许我没有指定我只想迭代状态为“requested”的关系