【问题标题】:get value from query array of id's ruby从 id 的 ruby​​ 的查询数组中获取值
【发布时间】:2012-04-16 11:13:39
【问题描述】:

我一直在搜寻,寻找这个问题的答案,很快就杀死了 3 个小时。

我正在执行查询以从数据库中获取某些 user_id。 (我这样做是为了将结果保存在一个变量中,以便稍后在请求中使用)

sql = <<-SQL
    SELECT users.id FROM users WHERE users.active = 't' and (users.created_by = #{user_id} OR users.id = #{user_id})
SQL
connection.execute(sql)

然后我有一个 ID 数组。所以我现在尝试迭代这些以查看特定 ID 是否在此数组中。

变量

raise @editable_users_list.to_yaml

结果

- !binary "aWQ=": 7
  0: 7
- !binary "aWQ=": 8
  0: 8
- !binary "aWQ=": 10
  0: 10

我试图提取正确结果的绝望尝试

def can_edit_user?
      if logged_in?
        @editable_users_list.each do |user|
          raise user.to_s
          if user[:id].to_s == current_user[:id].to_s
            return true
          end
        end
      end
      return false
    end

上面的 raise 异常表明我的查询实际上是一个数组数组

{"id"=>7, 0=>7}

现在我一直在玩here 提到的很多东西,然后就放弃了。

对此的任何和所有帮助......非常感谢。

【问题讨论】:

    标签: sql ruby-on-rails arrays iteration


    【解决方案1】:

    如果您只想获取用户的 id,那么只需这样做:

    @editable_users_list.map!(&:id)
    

    然后检查它:

    return @editable_users_list.include? @editable_users_list
    

    已编辑

    sql = <<-SQL
        SELECT users.id FROM users WHERE users.active = 't' and (users.created_by = #{user_id} OR users.id = #{user_id})
    SQL
    @editable_users_list = connection.execute(sql)
    
    @editable_users_list = @editable_users_list.map!(&:id)
    

    【讨论】:

    • 我遇到了错误,这肯定来自我尝试实施您的解决方案的方式。你能在代码块中一起提供这个吗?要测试您的块,您可以使用上面相同的查询,只需删除条件。
    • 块 arg 和给定的实际块。
    • 当我这样做def can_edit_user? if logged_in? raise @editable_users_list.map!(&amp;:id)
    • 为什么你使用 SQL 连接而不是 Active Record ?你也可以显示你的'sql'的响应。
    • 当我这样做时完全相同的错误。但我已经想通了,但要感谢你坚持这一点。
    【解决方案2】:

    答案如下,这是因为 SQL 返回的是哈希值。完全不知道为什么。如果有人愿意告诉我上述查询,我​​的和 Vik 的都返回这个,那将是巨大的 :)。虽然我跑题了。

    它的工作原理是像这样循环遍历两个哈希

    def can_edit_user?(user_id)
      if logged_in?
        @editable_users_list.each do |user|
          user.each do |id,value|
            if value == user_id
              return true
            end
          end
        end
      end
      return false
    end
    

    我不确定这是否应该这样做,或者这是否是“SQL 连接”问题的解决方法。

    无论如何,上面的代码在做我想做的事情,只是不是最优的(见鬼,也许整个代码都不是最优的......)

    再次为 Vik 抽出时间干杯,您对上述内容的想法仍然很棒。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-24
      • 2015-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多