[英]Ruby on Rails: Ransack undefined method `result`
我是ROR的新手,所以這可能是一個非常簡單的問題。
我剛為我的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)
第三次編輯:
另一個錯誤:/
未定義的方法`schema_cache'
將提取的源位於此行的項目控制器中
@q = Project.search(params[:q])
並且您確定在將Gem添加到Gemfile並重新啟動實例或具有正確的開發環境設置后運行了Bundle Install?
Ransack添加了搜索方法,因此它似乎沒有正確安裝。
另一個問題解決了問題: Ruby on Rails:高級搜索
我從來沒有使用過的寶石ransack
,但我覺得你的第一線def search
應該是def index
比您定義的search method
別的地方...或者你有包括用於路線search
你的routes.rb?
無論如何,你正在尋找的是一個非常簡單的搜索,我認為你不需要任何寶石。
您可以在模型中定義搜索方法:
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 %>
我希望它有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.