Null vs Nil在数据库中

时间:2014-07-10 13:28:38

标签: sql ruby-on-rails sqlite

我正在使用我的rails应用程序的SQLite3数据库,并且在尝试解决此问题时非常令人沮丧。

我希望以不同的方式填充复选框,具体取决于表单(_form.html.erb)是在更新中还是在创建时呈现:

  <% if @foo.new_record? %>
    <% query = "association_id == nil" %>
  <% else %>
    <% query = "" %>
  <% end %>

然后我将查询字符串传递给我的复选框

collection_check_boxes(:host, :association_ids, Association.where(query), :id, :name)

这应该做的是给我所有的关联作为更新的复选框,只有那些在创建时不具有association_id的关联。

如果我用:association_id=>nil替换查询,我将获得所需的创建结果。 如果我用Association.all替换查询,我会得到更新结果。 我可以在检查new_record时手动复制我的所有代码吗?但是我的代码已经相当漫长而复杂,而且会让它变得更加复杂。所以我想把一个字符串(查询)传递给我的where调用。这是我遇到麻烦的地方。

当我查看rails控制台并进行直接SQL查询时,我注意到没有association_id的返回文件将显示为association_id: nil。所以我尝试匹配nil,但这给了我一个未知的专栏:nil&#34;来自SQL的错误。当我尝试匹配SQL NULL时,它找不到任何东西。

如何将nil属性存储在数据库中,如何使用字符串查询它?

1 个答案:

答案 0 :(得分:3)

你应该做

<% query = "association_id is null" %>

Association.where(:association_id => nil) 

将在内部转换为如下所示的查询

select * from associations where association_id is null