获取除Rails中具有空列的条目之外的所有条目

时间:2010-03-11 18:43:54

标签: ruby-on-rails activerecord sqlite

如何获取所有“链接”条目,并删除那些空白的“网址”列?我的控制器看起来像这样:

  def show
    @user = User.find_by_username(params[:username])
    @links = @user.links.all

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @links }

    end
  end

提前致谢!

编辑#1

如果我这样做:

@links = @user.all(:conditions => 'url != NULL')

我收到错误:

NoMethodError in UsersController#show 
undefined method `all' for #<User:0x2254f98>

如果我这样做:

@links = @user.links.all(:conditions => 'url != NULL')

我仍然可以获得所有链接,即使是那些有空网址的链接......

编辑#2

如果我这样做

@links = User.all(:conditions => 'url != NULL')

我得到了

ActiveRecord::StatementInvalid in UsersController#show
SQLite3::SQLException: no such column: url: SELECT * FROM "users" WHERE (url != NULL) 

如果我这样做

@links = Link.all(:conditions => 'url != NULL')

我仍然可以获得所有链接,即使是那些有空网址的链接......

我想知道NULL和空白字段之间是否有区别?

编辑#3

现在我的代码看起来像这样:

  def show
    @user = User.find_by_username(params[:username])
    @links = @user.links.all(:conditions => "url <> ''")

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @links }

    end
  end

解决方案

#controller
@links = @user.links.not_null_url

#model
named_scope :not_null_url, :conditions => "url <> ''"

这个有效!请务必访问以下链接:

#view
<% @links.each do |link| %>

而不是:

#view
<% @user.links.each do |link| %>

5 个答案:

答案 0 :(得分:6)

它不是@user,而是

User.all(:conditions => 'url != NULL')

修改

其实我有疑问。 "links"是用户表中的列还是模型?

编辑#2

这是:@user.links.all(:conditions => {:url => !nil})

编辑#3

发现它! url IS NOT NULLURL != NULL或使用NULL的任何内容都无法解决您的问题,因为正如您所说,null和空字段之间存在差异。下面的代码对我有用:

@user.links.all(:conditions => "url <> ''")

正如@klew建议的那样,如果你使用named_scope

会更好
#model
named_scope :not_null_url, :conditions => "url <> ''"

#controller
@user.links.not_null_url

答案 1 :(得分:1)

尝试:

@links = @user.links.all(:conditions => "url IS NOT NULL")

如果您在链接模型中将其添加为named_scope会更好:

named_scope :not_null_url, :conditions => "url IS NOT NULL"

然后在控制器中:

@links = @user.links.not_null_url

答案 2 :(得分:0)

一般建议:如果您的ORM强迫您跳过混乱的箍只是为了在SQL中执行一个简单的WHERE子句,请尝试使用SQL代替。

在Rails的某个地方,有一种简单的方法可以将它(“从*用户名为'@ username'和url not null”的用户选择,用户名)作为参数化查询,并将它交给你一个记录集。

在现实世界中这是微不足道的,但是你的框架正在变得艰难。走出去一秒......

答案 3 :(得分:0)

@user.all(:conditions => 'url != NULL')

答案 4 :(得分:0)

您也可以在Rails3 Table.where(:col1 =&gt;!nil,:col1 =&gt;!nil)中执行此操作