2012-07-20 87 views
0

我是ROR的新手,所以這可能是一個非常簡單的問題。Ruby on Rails:Ransack undefined method'result`

我剛剛爲我的web應用程序安裝了ransack gem。我想在我的數據庫中搜索項目名稱和客戶端。我有一個索引頁面視圖,用於我的主頁,然後是一個搜索頁面,它使用我創建的搜索操作。

def index 
@projects = Project.all 

    respond_to do |format| 
    format.html # index.html.erb 
    format.json { render :json => @projects } 
    end 
end 


def search 

    @q = Project.search(params[:q]) 
    @project_search = @q.result(:distinct => true) 

    respond_to do |format| 
    format.html # search.html.erb 
    format.json { render :json => @projects } 
    end 
end 

這裏是我的搜索視圖的一部分:

<%= search_form_for @q do |f| %> 
    <%= f.label :project_name %> 
    <%= f.text_field :project_name %> 
    <%= f.label :client %> 
    <%= f.text_field :client %> 
    <%= f.submit %> 
<% end %> 

當我嘗試加載搜索頁面,我得到這個錯誤:

未定義的方法'搜索」

隨着提取的源文件在我的項目控制器中,位於此行

@q = Project.search(params[:q]) 

希望這是一個簡單的解決方案,你可以解釋我做錯了什麼,所以我學習。

任何幫助都將不勝感激。

在此先感謝!

編輯: 我已經在上面添加了我的索引操作,以向您顯示我有索引操作和搜索操作。這裏是我的routes.rb文件。

FinalApp::Application.routes.draw do 
resources :projects 
match "search" => "projects#search", :as => :search 
root :to => 'projects#index' 
end 

第二個編輯:

我沒有重新啓動我的服務器。我現在有另一個錯誤。

未定義的方法`結果」

與所提取的源在我的項目控制器在此線是

@project_search = @q.result(:distinct => true) 

THIRD編輯:

另一個錯誤:/

未定義的方法` schema_cache'

隨着提取源在我的項目控制器在該行

@q = Project.search(params[:q]) 
+0

你正在使用什麼類型的數據庫? – 2012-07-20 09:56:01

+0

sqlite3。當我剛開始製作我的應用程序時,我運行scaffold命令時,我剛剛離開了默認數據庫 – Jazz 2012-07-20 09:58:44

回答

0

Problem solved in another question: Ruby on Rails: Advanced search

我從來沒有使用過的寶石ransack這樣,但是我覺得你的第一線def searchdef index比你定義search method別的地方......或有您在routes.rb中包含了search的路線?

無論如何,你正在尋找的是一個非常簡單的搜索,我不認爲你需要任何寶石。

您可以在您的模型中定義搜索方法:

product。RB

def self.search(search) 
    if search 
    find(:all, :conditions => ['name LIKE ?', "%#{search}%"]) 
    else 
    find(:all) 
    end 
end 

products_controller.rb:

def index 
    @projects = Project.search(params[:search]) 
end 

搜索表單可以在應用程序中的任何地方包括:

<% form_tag projects_path, :method => 'get' do %> 
    <p> 
    <%= text_field_tag :search, params[:search] %> 
    <%= submit_tag "Search", :name => nil %> 
    </p> 
<% end %> 

請看看here,如果你需要一個高級搜索一下here

我希望它能幫助

+0

感謝您的回覆!請參閱我上面的編輯。我曾經觀看過兩次鐵路投影視頻,而我的主要問題是他們已經過時了。我需要一個高級搜索表單,以便搜索許多不同的字段,以幫助縮小大型數據庫的搜索結果範圍。我看着使用meta_search,太陽黑子,思維獅身人面像,到目前爲止,我還沒有能夠讓他們找到更多的價值。我希望你明白我的意思。有什麼建議麼? – Jazz 2012-07-20 09:28:58

+0

是的,我明白你的意思,但是當你開始包括許多寶石時,你可能會面臨不兼容。出於這個原因,我寧願總是創建我自己的搜索,即使它是先進的。例如,你可以在很多領域進行搜索,比如'name'和'surname':'find(:all,:conditions => ['name or surname LIKE?','%#{search}%「])'' 。我想你應該嘗試創建自己的搜索方法.... – gabrielhilal 2012-07-20 16:31:53

2

而且你確信你運行包添加寶石您的Gemfile後,安裝並重新啓動實例或有正確的發展ENV設置?

Ransack添加了搜索方法,因此看起來沒有正確安裝。

+0

我愚蠢沒有重新啓動服務器,謝謝!我現在有另一個問題。一行後:/,請看原文中的編輯。 – Jazz 2012-07-20 09:42:26