2017-11-03 12 views
1

私はRailsアプリケーションに簡単な検索を実装しました。検索をクリックするたびに結果は返されませんが、同じままです。Rails単純検索が機能しません

IモデルContractを持っているが、以下、私は別のレールを有するContractindex.html.erb

<form action="<%= contracts_path%>" method ="get"> 
<div class="col-lg-6"> 
    <div class="input-group"> 
    <%= text_field_tag :search, params[:search], class: 'form-control'%> 
    <span class="input-group-btn"> 
    <%= submit_tag "Search", class: "btn btn-success" %> 
    </span> 
    </div> 
</div> 
</form> 

<% if @current_user.contracts.present? %> 
<% @current_user.contracts.each do |f| %> 
    <% if @current_user.contracts.present? %> 
    <% @current_user.contracts.each do |f| %> 
<tr> 
    <td><%= f.contract_name %></td> 
    <td><%= f.contract_email %></td> 
    <td><%= f.contract_type %></td> 
    <td><label class="label label-success" ><%= f.contract_relationship %></label></td> 
    <% end %> 
    <% else %> 
    <td colspan="5"><center>There are currently no contracts yet.</center></td> 
    <% end %> 
</tr> 

でコードContractコントローラで

def self.search(search) 
    where(["contract_name LIKE ?", "%#{search}%"]) 
end 

def index 
    @user = User.find_by_id(params[:user_id]) 
    @search = params[:search] 
    if @search 
     @contracts = @current_user.contracts.search(@search).order("created_at DESC") 
    else 
     @contracts = @current_user.contracts.order('created_at DESC') 
    end 
end 

あります完全に動作するアプリ、私は検索コードとまったく同じ方法に従いますが、このRailsアプリケーションでは動作しません。私はまた、別のプロジェクトのログがこれを返すことに気付きました。これは完全に機能します。

SELECT "coworkings".* FROM "coworkings" WHERE "coworkings"."partner_id" = ? AND (title LIKE '%myspace%') ORDER BY created_at DESC [["partner_id", 20]] 

このプロジェクトは、これだけを返すが、他の半分が欠けているように思える、

SELECT "contracts".* FROM "contracts" WHERE "contracts"."user_id" = ? [["user_id", 3]] 

奇妙な私は別のプロジェクトのとまったく同じ方法に従いますが、それはまだ、このアプリケーションでは動作しません。私は両方のプロジェクトに SQLite3を使用しています。もしあなたが私が作ったエラーを指摘することができれば幸いです。

答えて

0

.searchは、Contractのクラスメソッドです。しかし、あなたはActiveRecord_Rrelationでそれを呼び出そうとしています。私はあなたが未定義のメソッドエラーを取得していないことに驚いています。何をしたい

はスコープです:

## contract.rb 
scope :search, lambda { |term| 
    where(["contract_name LIKE ?", "%#{term}%"]) 
} 

は、その後、あなたが何をしたかのようにそれをチェーンすることができます。

@contracts = @current_user.contracts.search(@search).order("created_at DESC") 
+0

私は試しました。それは何も返しませんし、動作しません。 –

関連する問題