ruby - 从方法内部的 block 方法返回 true 或 false

标签 ruby

一个 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/

相关文章:

ruby-on-rails - 更新表单在多对多关系中根本不起作用

ruby-on-rails - Hartl Rails 教程第 2 章, "hello world"未显示在 http ://localhost:3000 中

ruby-on-rails - 如何 stub 删除关联以返回 false

ruby-on-rails - 如何使用 Ruby MongoDB 驱动程序将文档字段值作为 ISODate 插入?

ruby - 单表版本控制数据

ruby-on-rails - 删除数组中的最后 2 个元素 - Ruby

ruby-on-rails - 使用多个 yield 插入内容

ruby-on-rails - Rails 测试的结果不一致

ruby-on-rails - 在一页上创建目标和任务的 Rails 待办事项列表应用程序 - 缺少参数

ruby-on-rails - Rails Devise - 多种模型