一个 Item
has_many
Pieces
。我有两种方法,一种是查明 Piece 是否可用,另一种是查明 Item 是否有可用的部分。
# 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
Item
中的available?
方法是错误的。如果 Item
有可用的 pieces
,我希望它返回 true
,如果没有,则返回 false
。我的代码背后的理论是该方法返回 false
,除非有一段返回 true
。当我在控制台中执行此操作时,我得到的只是散列中的部分,而不是真或假。
谁能解决我的问题或告诉我更好的方法?
最佳答案
使用Enumerable#any?
:
def available?(current_user, user, item)
item.pieces.any? do |piece|
piece.available?(current_user, piece)
end
end
关于ruby - 从方法内部的 block 方法返回 true 或 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13342342/