从方法内的块方法返回true或false

问题描述 投票:2回答:3

一个qazxsw poi qazxsw poi qazxsw poi。我有两种方法,一种可以找出这件作品是否可用,另一种可以找出一件作品是否有可用的作品。

Item

我在has_manyPieces方法是错误的。如果 # in piece.rb def available?(current_user, piece) if piece.status == 1 true elsif piece.status == 2 false elsif piece.status == 3 true if piece.friend_id == current_user.id end end #in item.rb def available?(current_user, user, item) false item.pieces.each do |piece| if piece.available?(current_user, piece) true end end end available?,我想要它返回Item,如果没有true,我希望它返回Item。我的代码背后的理论是该方法返回pieces,除非有一块返回false。当我在控制台中执行此操作时,我得到的是散列中的碎片,而不是真或假。

任何人都可以解决我的问题或告诉我更好的方法吗?

ruby
3个回答
2
投票

如果您需要检查项目是否至少有一个可用部分,则该方法可能如下所示:

false

10
投票

使用true

def available?(current_user, user, item)
  item.pieces.each do |piece|
    return true if piece.available?(current_user, piece)
  end
  false
end

0
投票

从你的代码中推断我认为Enumerable#any?中的def available?(current_user, user, item) item.pieces.any? do |piece| piece.available?(current_user, piece) end end 方法不需要第二个参数,因为它是Piece的实例方法。所以我建议你重构一下这个方法:

available?

它会给你一个更干净的界面。

© www.soinside.com 2019 - 2024. All rights reserved.