【发布时间】:2016-05-20 19:04:26
【问题描述】:
我有几条以title 开头的记录:
- 尼克1
- 尼克2
- 尼克3
- 其他名字1
如何选择标题以“Nick”开头的所有记录并以正确的顺序呈现?比如:
@records = Record.where(title starts with: params[:title_name])
render json: @records
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4
我有几条以title 开头的记录:
如何选择标题以“Nick”开头的所有记录并以正确的顺序呈现?比如:
@records = Record.where(title starts with: params[:title_name])
render json: @records
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4
您可以在此处使用LIKE 运算符:
@records = Record.where('title LIKE ?', "#{params[:title_name]}%").order(:title)
我更愿意将这些放在一个范围内:
scope :title_search, ->(title){ where('title LIKE ?', "#{title}%") }
并通过以下方式调用它:
@records = Record.title_search(params[:title_name])
【讨论】:
'title LIKE ?', "#{title}%"。
Record.where('LOWER(title) LIKE ?', "#{params[:title_name].downcase}%").order(:title) 不区分大小写。 SQL 函数也可以是LCASE。取决于您的数据库。
你可以试试Searchlogic。
那么就这么简单:
@search = Record.new_search(params[:search])
@search.condition.title_starts_with = "Nick"
@models = @search.all
或者你可以试试
Record.where("title LIKE :prefix", prefix: "#{prefix}%")
【讨论】:
我建议使用 arel,如“How to do a LIKE query in Arel and Rails?”
records = Record.arel_table
Record.where records[:title].matches("#{params[:title_name]}%")
【讨论】: