2016-06-01 27 views
0

我正在做一個Stuck.io的教程,在我的管理模型上實現搜索字段,因此有人可以搜索特定的管理員。表單正在出現,但是當我嘗試使用搜索時,出現錯誤字段,我不知道出錯的位置。實現搜索字段時未定義的局部變量或方法`params'

我得到確切的錯誤是:

NameError at /admins 
undefined local variable or method `params' for #<Class:0x007f91e39df950> 

我的自定義設計管理控制器:(創建索引和顯示頁面)

class AdminController < ApplicationController 
    before_action :authenticate_admin! 

    def index 
    @admins = Admin.all 
    # Search Query 
    @admins = Admin.search(params[:search]) 
    end 

    def show 
    @admin = Admin.find_by_admin_ident(params[:id]) 
    end 

end 

路線爲我定製的管理控制器:

  admins GET /admins(.:format)     admin#index 
      admin GET /admins/:id(.:format)    admin#show 

我聯繫型號:搜索方法

class Admin < ActiveRecord::Base 

    # Search Functionality 
    def self.search(search) 
    if search 
     @admins = Admin.where(["name LIKE ?","%#{params[:search]}%"]) 
    else 
     all 
    end 
    end 

end 

最後我的搜索形式:

<div class="col-md-4"> 
    <div class="info-block"> 
    <%= form_tag admins_path, :method => 'get' do %> 
     <%= text_field_tag :search, params[:search], :class => 'form-control', :id => 'admin-search-field' %> 
     <center><%= submit_tag "Search Users", :class => 'btn btn-default btn-sm', :id => 'search-btn' %></center> 
    <% end %> 
    </div> 
</div> 

預先感謝您的輸入!請讓我知道如果你需要更多的東西!

回答

2

您無法訪問模型內​​部的params散列。這隻能從控制器訪問。

相反的:

@admins = Admin.where(["name LIKE ?","%#{params[:search]}%"]) 

用途:

@admins = Admin.where(["name LIKE ?","%#{search}%"]) 

然後在控制器,傳遞價值,你正在做的已經:

Admin.search(params[:search]) 
+0

真棒該訣竅!在這裏只是一個側面的問題,有沒有什麼辦法可以搜索多列,即通過火災和姓氏?並搜索哪些字母不是有限的?現在在我的演示中,我有三個測試用戶,但是當我小寫他們的名字時,它不會顯示?生病給你最好!謝謝 –

+0

當然可以。如果你只是想要一些簡單的功能,那麼你可以手動實現 - 例如在Postgresql中,只需使用'ILIKE'而不是'LIKE'來區分大小寫。如果你正在尋找一些更高級的工具,我會推薦一些像Ransack(https://github.com/activerecord-hackery/ransack)的東西 - 看看這個截屏視頻(http://railscasts.com/episodes/370 - 快速入門指南)。 –

+0

美麗!非常感謝! –

相關問題