Rails简单搜索不起作用

时间:2017-11-03 04:34:53

标签: ruby-on-rails search

我已经在我的Rails应用程序中实现了一个简单的搜索。每当我点击搜索时,它都不会返回任何结果,但保持不变。

我有一个模型Contract,下面是代码

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

Contract控制器中,

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

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>

我有另一个Rails应用程序完美运行,我遵循完全相同的搜索代码方式,但它在这个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。如果您能指出我所犯的错误,将不胜感激。

1 个答案:

答案 0 :(得分:0)

您的.searchContract的类方法。但是你试图在ActiveRecord_Rrelation上调用它。我很惊讶你没有得到未定义的方法错误。

你想要的是一个范围:

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

然后你可以像你所做的那样把它链起来。

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