0

我一直在搜寻,寻找答案,并迅速杀死了 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}

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

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

4

2 回答 2

0

答案如下,这是因为 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 抽出时间干杯,您对上述内容的想法仍然很棒。

于 2012-04-17T06:42:20.313 回答
0

如果您只想获取用户的 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)
于 2012-04-16T11:19:48.710 回答