Item
has_many
Pieces
。我有两种方法,一种可以找出这件作品是否可用,另一种可以找出一件作品是否有可用的作品。
# 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
,则返回false
。我的代码背后的理论是该方法返回true
,除非有一个返回{{1}}的部分。当我在控制台中执行此操作时,我得到的是散列中的碎片,而不是真或假。
任何人都可以解决我的问题或告诉我更好的方法吗?
答案 0 :(得分:10)
使用Enumerable#any?
:
def available?(current_user, user, item)
item.pieces.any? do |piece|
piece.available?(current_user, piece)
end
end
答案 1 :(得分:2)
如果您需要检查项目是否至少有一个可用部分,方法可能如下所示:
def available?(current_user, user, item)
item.pieces.each do |piece|
return true if piece.available?(current_user, piece)
end
false
end
答案 2 :(得分:0)
从代码中推断我认为available?
中的Piece.rb
方法不需要第二个参数,因为它是Piece的实例方法。所以我建议你重构一下这个方法:
def available_to?(current_user)
if status == 1
true
elsif status == 2
false
elsif status == 3
true if friend_id == current_user.id
end
end
它会给你一个更干净的界面。