Ruby on rails 从“有多个属于”查询中排除当前对象

Ruby on rails 从“有多个属于”查询中排除当前对象,ruby-on-rails,Ruby On Rails,一只鞋有许多袜子。袜子属于鞋子 使用socks控制器,我想与具有与shoe相同父id的兄弟姐妹进行比较 SocksController def show @sock = Sock.find(params[:id]) @shoe = Shoe.find(@sock.shoe_id) @socks = @shoe.socks end socks-show.html.erb <% @socks.each do |sock| %> <%=

一只鞋有许多袜子。袜子属于鞋子

使用socks控制器,我想与具有与shoe相同父id的兄弟姐妹进行比较

SocksController
  def show
    @sock = Sock.find(params[:id])
    @shoe = Shoe.find(@sock.shoe_id)
    @socks = @shoe.socks
  end
socks-show.html.erb

  <% @socks.each do |sock| %>
    <%= link_to sock.sock_name %>
  <% end %>

当然,我会在show.html.erb中获得所有袜子,但我想从@socks=@shoe.socks中排除我当前的袜子。有办法做到这一点吗?我正在探索哪里。现在没有选择,但以前从未尝试过


此外,我的初始def秀本身是否存在任何问题?我认为这没关系,但我觉得我的呼叫是多余的,我可以简化它以减少查询。

如果您想在视图中排除当前的sock,您可以这样做

    <% @socks.each do |sock| %>
      <% next if sock.id == @sock.id %>
      <%= link_to sock.sock_name %>
    <% end %>


这正是我想要的。感谢您与我共享下一个if。您可以使用
@socks=@shoe.socks.where.not(id:params[:id])
将其过滤掉。感谢您的共享。我将对这些方法进行比较,看看哪种更快。