【问题标题】:Rails break and return not working导轨断裂并返回不起作用
【发布时间】:2016-08-12 02:47:55
【问题描述】:

我正在和考拉一起工作。我必须检查用户授予应用程序的权限。我制作了一个名为 facebook helper 的助手。有一个def has_permission?(perm)。我的代码如下:

def has_permission? (perm)
  @graph = Koala::Facebook::API.new(current_user.token)
  @permissions = @graph.get_connections('me', 'permissions')
  @bool = false
  @permissions.each do |p|
   if p[0] == perm && p[1] == 'granted'
     @bool = true
     break
   end
  end
 return @bool
end

它总是返回 false。这有什么问题?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    你的@permissions 被填充了吗?你也可以在没有break的情况下写这个

    def has_permission? (perm)
      @graph = Koala::Facebook::API.new(current_user.token)
      @permissions = @graph.get_connections('me', 'permissions')
      @bool = false
      @permissions.each do |p|
        unless @bool
          @bool = (p[0] == perm && p[1] == 'granted')
        end
      end
      @bool
    end
    

    我还将p[0] == perm && p[1] == 'granted' 移到自己的方法中以提高可读性。

    【讨论】:

    • 感谢您的回答。但我不想使用,除非在多行实现中。
    • unless 只是写if ! 的另一种方式,所以你可以这样做。无论哪种方式,@bool 的值取决于(p['permission'] == perm && p['status'] == 'granted'),因此最好将其分配给@bool IMO。这样做也消除了break的使用,所以更干净一些。
    【解决方案2】:

    我自己解决了:

    def has_permission? (perm)
      @graph = Koala::Facebook::API.new(current_user.token)
      @permissions = @graph.get_connections('me', 'permissions')
      # binding.pry
      @bool = false
      @permissions.each do |p|
        if (p['permission'] == perm && p['status'] == 'granted')
          @bool = true
          break
        end
      end
      @bool
    end
    

    刚刚将p[0] 更改为p['permission']p[1] 更改为p['status']

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      • 2011-06-05
      • 2017-10-25
      • 2022-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多