2010-03-11 12 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 =>無)

相關問題