从id的ruby的查询数组中获取值

时间:2012-04-16 11:13:40

标签: sql ruby-on-rails arrays iteration

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

上面的引发异常显示我的查询实际上是一个数组数组

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

现在我一直在玩很多提及here的事情并且已经放弃了。

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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花时间,你对上面的想法仍然很棒。