2010-03-11 53 views
3

如何获取所有'链接'条目,并且将'url'列为空白的条目豁免?我的控制器看起来像这样:取得所有条目在Rails中排除空列的人

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') 

I S直到得到所有的环节,即使是那些空的网址栏...

编辑#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') 

我仍然得到所有的链接,即使那些具有空的url字段...

我想知道如果这是NULL和字段beeing空的区别?

编辑#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| %> 

回答

6

它不是@user,其

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

编辑:

其实我有一个疑问。是"links"列入用户表或是模型?

编辑#2

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

编辑#3

找到了! url IS NOT NULLURL != NULL或任何使用NULL的东西都不会解决您的问题,因为如您所说,空字段和空字段之间存在差异。下面的代码为我工作:

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

而作为@klew建议,如果你使用它会是更好的一个named_scope

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

#controller 
@user.links.not_null_url 
+0

链接是一个属于用户 – Alfred 2010-03-11 20:46:11

+0

的模型好吧,我编辑我的答案基于你:尝试@ user.links.all(:条件=> {:url =>!nil})''。希望它有效。 – 2010-03-11 20:54:50

+0

仍然无法正常工作:/有没有关系,它有很多链接,它总是有人得到了url字段? – Alfred 2010-03-12 16:19:52

0

一般建议:如果你的ORM强迫你通过混淆跳火圈只是在SQL执行一个简单的WHERE子句,尝试使用SQL代替。

在Rails的某处,有一个简单的方法将它作为参数化查询并将它传递给您一个记录集,它将一个简单的方法将它交给用户(用户名为'@username'和url not null',用户名')。

这在现实世界中是微不足道的,但是你的框架让它变得很难。走出去一会儿...

+0

它使用Rails框架太 – 2010-03-11 19:40:18

+0

这是微不足道我说的是吧? – 2010-03-12 03:16:50

0

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

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 
0

你也可以做到这一点在Rails3中Table.where(:COL1 =>零,:COL1 =>无)

相关问题