var*_*tis 60 sql ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1
我有一个名为Topic的模型,它有一个名称作为字段.
所以说我有一个我正在寻找的术语,苹果.
如果我做了
Topic.find_by_name("apple")
Run Code Online (Sandbox Code Playgroud)
我得到一个名为apple的记录.这很好 - 但是如何更改find_by_name以便它可以找到"apple juice"以及"apple" - 基本上,找到包含原始查询的名称或者与原始查询完全匹配?
编辑: 感谢您的所有回复.我想我之前应该更清楚一点,但是如果我想通过变量名来找到(显然我不想每次都找到名字"apple"):))?
我如何操纵Topic.where来适应这个?所以像......
@topic = Topic.where(......., @name)
Run Code Online (Sandbox Code Playgroud)
Del*_*man 120
我认为这样的事情应该有效:
Topic.where("name like ?", "%apple%")
Run Code Online (Sandbox Code Playgroud)
为了适应您的编辑:
Topic.where("name like ?", "%#{@search}%")
Run Code Online (Sandbox Code Playgroud)
基本的字符串插值,你正在使用@search字符串内部的值%%,所以@search = "apple"你最终得到了 %apple%
Sco*_*hea 10
看起来在Rails 3中你会想要使用where:
Topic.where("name ILIKE ?", "%apple%")
Run Code Online (Sandbox Code Playgroud)
不要像这样直接放置字符串.它叫做SQL注入.您应该使用.where:
Topic.where("name like '?%' ", params[:name])
Run Code Online (Sandbox Code Playgroud)
使用PostgreSQL,您还可以使用匹配运算符:
Topic.where("name ~* ?", @search)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54435 次 |
| 最近记录: |