2011-01-20 30 views
0

我的代碼在軌一起排序是非常相似的,在railscasts #240鏈接搜索和使用serachlogic

的區別是,我使用的軌道2.3.10所以我不會使用「其中」。相反,我使用serachlogic和我的模型看起來像這樣...

//Model.rb 
def self.search(search) 
     if search 
     Model.column_name_like(search) 
     else 
     find(:all) 
     end 
    end 

(我使用的搜索邏輯,因爲我需要區分大小寫,因爲我部署到Heroku的(Postgres的))

當我嘗試鏈我的方法在railscast和其他教程在一起,就像我得到一個錯誤,如「法秩序沒有找到」

我的控制器是這裏...

@objects=Model.search(params[:search]).order(sort_order('created_at')) 

這是一個略有不同的列排序方法,在我插入搜索之前爲我工作。

爲什麼此方法在某些教程中工作,但在此情況下會引發錯誤。是否因爲教程在rails 3中?

回答

0

該railscast似乎沒有使用searchlogic,這解釋了爲什麼這不起作用。它使用rail3的新Active Record(Arel)庫來實現searchlogic式的行爲。

相反的:

@objects=Model.search(params[:search]).order(sort_order('created_at'))

嘗試:

@objects=Model.search(params[:search]).ascend_by_created_at

或者:

@objects=Model.search(params[:search]).descend_by_created_at

歡呼

+1

這有效,但它不夠靈活。我目前使用的應用程序助手,所以我可以按列asc/dsc排序。我還需要在最後添加分頁,例如.. @ objects.Model.search(params [:search])。order(sort_order('name'))。paginate(:per_page => @per_page,:page = > params [:page]) – 2011-01-20 18:11:57

1

幾天後我自己找到了一個最佳解決方案。我必須改變我的模型。 (:所有),而不是返回找到在別的我回到一個新的「空」搜索對象

@search=Model.column_name_like("") 

富勒參考我的模型和控制器,它現在支持排序,搜索和分頁看起來像......

def self.search(search) 
     if search 
     Model.column_name_like(search) 
     else 
     @search=Model.column_name_like("") 
     end 
    end 

def index 
    @per_page = params[:per_page] || Lease.per_page || 20 
    @search=Lease.search(params[:search]) 
    @[email protected]rch.find(:all, :order=>(sort_column + " "+ sort_direction)).paginate(:per_page => @per_page, :page => params[:page]) 
end 

private 
def sort_column 
    Model.column_names.include?(params[:sort]) ? params[:sort] : "default_column_name" 
end 

def sort_direction 
    %w[asc desc].include?(params[:direction]) ? params[:direction] : "asc" 
end 

不要忘記在你的視圖中放置隱藏的表單助手來傳遞列名和方向。

<p> 
<% form_tag leases_path, :method => 'get' do %> 
<p> 
    <%= text_field_tag :search, params[:search] %> 
    <%= submit_tag "Search", :name => nil %> 
</p> 
<%=hidden_field_tag :direction, params[:direction]%> 
<%=hidden_field_tag :sort, params[:sort]%> 

<% end %>