我已经在我的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
在Contract
,index.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
。如果您能指出我所犯的错误,将不胜感激。
答案 0 :(得分: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")