【发布时间】:2019-04-04 17:16:48
【问题描述】:
我有一个高级搜索页面,其中包含用于我的合同的单独搜索控制器。
我的搜索工作正常,但正在搜索所有记录,我只希望它搜索与当前用户关联的记录。
我正在使用设计。
下面是我的search.rb
class Search < ActiveRecord::Base
def search_contracts
contracts = Contract.all
contracts = contracts.where(user_id: current_user)
contracts = contracts.joins(:tenant).where(["tenants.first_name LIKE ? OR tenants.last_name LIKE ?", "%#{keywords}%", "%#{keywords}%"]) if keywords.present?
contracts = contracts.where(["balance >= ?", min_balance]) if min_balance.present?
contracts = contracts.where(["balance <= ?", max_balance]) if max_balance.present?
contracts = contracts.where(["unpaid_rent LIKE ?", unpaid_rent]) if unpaid_rent.present?
return contracts
end
end
这是我的 search_controller.rb
class SearchesController < ApplicationController
def new
@search = Search.new
end
def create
@search = Search.create!(search_params)
redirect_to @search
end
def show
@search = Search.find(params[:id])
end
private
def search_params
params.require(:search).permit(:keywords, :min_balance, :max_balance, :unpaid_rent)
end
end
显示搜索结果页面
.wrapper_with_padding
#houses.clearfix
- unless @search.user_search_contracts.blank?
- @search.user_search_contracts.each do |contract|
%a{ href: (url_for [contract])}
.house
%p.end_of_contract= contract.end_of_contract
%p.balance= number_to_currency(contract.balance, :unit => "£", negative_format: "(%u%n)")
-if contract.tenant.present?
%p.tenant_id= contract.tenant.full_name
-else
%p No Tenant Assigned
-if contract.house.present?
%p.house_id= contract.house.full_house_name
-else
%p No Property Assigned
- else
%h2 Add a Contract
%p It appears you have not added any contracts
%button= link_to "New Contract", new_contract_path
= link_to "Advanced Search", new_search_path
【问题讨论】:
-
向 Search 模型添加初始化方法并向其发送 current_user 对象。另外,您使用
Search.create!(search_params)作为数据库中的资源,您需要保存这些搜索吗? -
嗨,@ZlatkoAlomerovic 感谢您的建议。我是 Rails 新手,所以不确定什么是初始化方法,请你显示一个 sn-p 吗?谢谢
标签: sql ruby-on-rails ruby devise