小编Mat*_*mer的帖子

NULL!= SQL查询中的值的结果(postgres和rails3)

我在Rails3应用程序中遇到了意外的postgres查询问题.

我以为我会通过stackoverflow运行这个,看看互联网的大脑有什么要说:)

这个结果是预期的行为(以及为什么?!)或者这是一个错误?

鉴于我在Postgres 9.1.4数据库中有一个表Orders,

id        state
=====     ======
1                     <-- nil (default value)
2         'success'
3         'failure'
Run Code Online (Sandbox Code Playgroud)

当我运行查询时:

Order.where('orders.state != ?', 'success').map { |order| order.id }
Order Load (3.8ms)  SELECT "orders".* FROM "orders" WHERE (orders.state != 'success')

=> [3]
Run Code Online (Sandbox Code Playgroud)

我期待结果[1,3].显然有2行(!='成功')满足.

为什么这是nil!=''成功'在这里不正确?是!=只是忽略NULL值?应该是?

注意:我使用以下查询生成了所需的结果:

Order.where('orders.state IS NULL OR orders.state != ?', 'success').map { |order| order.id }
Order Load (2.3ms) SELECT "orders".* FROM "orders" WHERE (orders.state IS NULL OR orders.state != 'success')

=> [1, 3]
Run Code Online (Sandbox Code Playgroud)

任何意见将不胜感激.

sql postgresql null ruby-on-rails

9
推荐指数
1
解决办法
3336
查看次数

当传递Ruby数组作为参数时,为什么`<<`追加而'+ =`不?

将数组传递给函数和<<vs 的行为时,我遇到了意外的结果+=.

任何人都可以解释为什么以下2个程序有不同的输出?

def build_results
  result = []

  [1, 2, 3].each { |value| concat_to_array(value, result) }

  result
end

def concat_to_array(value, arr)
  arr << value
end

build_results() # Will return [1,2,3].  As I would expect.
Run Code Online (Sandbox Code Playgroud)

VS

def build_results
  result = []

  [1, 2, 3].each { |value| add_to_array(value, result) }

  result
end

def add_to_array(value, arr)
  arr += [value]
end

build_results() # Will return [], not what I expected!
Run Code Online (Sandbox Code Playgroud)

我的理解是,在Ruby中,所有函数参数都是通过引用传递的,因此arr += [value]仍然应该对传递的数组进行操作并附加值.

情况并非如此,这告诉我我不理解+=<<在这种情况下的区别.

ruby arrays

1
推荐指数
1
解决办法
146
查看次数

标签 统计

arrays ×1

null ×1

postgresql ×1

ruby ×1

ruby-on-rails ×1

sql ×1