从has_many belongs_to查询中排除当前对象

时间:2016-06-06 23:43:40

标签: ruby-on-rails

鞋子有很多袜子。袜子属于鞋子。

使用socks控制器我想与兄弟姐妹进行比较,使用与鞋子相同的parent_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中排除我当前的袜子。有没有办法做到这一点?我现在正在探索where.not选项,但之前从未尝试过。

此外,我最初的def show有什么问题吗?我认为没关系,但感觉我在通话中是多余的,而且我可以简化它以减少查询。

1 个答案:

答案 0 :(得分:2)

如果你想在视图中排除当前的袜子,你可以这样做。

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