web-dev-qa-db-ja.com

Rails:特定の文字列を含むフィールドをfind_byする方法

トピックという名前のモデルがあり、フィールドとして名前があります。

だから、私が探している用語はAppleだと言ってください。

もし私が

Topic.find_by_name("Apple")

Appleという名前のレコードが返されます。それは良いことですが、find_by_nameを変更して「Apple juice」と「Apple」を検索できるようにするにはどうすればよいですか?基本的に、元のクエリを含む名前または元のクエリと完全に一致する名前を検索しますか?

編集: すべての応答をありがとう。以前はもう少し明確にすべきだったと思いますが、変数名で検索したい場合はどうなりますか(明らかに「Apple」という名前で検索したくないのは明らかです:))。

これに対応するためにTopic.whereを操作するにはどうすればよいですか?のようなもの...

@topic = Topic.where(......., @name)
58
varatis

私はこのような何かがうまくいくと思う:

Topic.where("name like ?", "%Apple%")

編集に対応するには:

Topic.where("name like ?", "%#{@search}%")

基本的な文字列補間、文字列@search内で%%の値を使用しているため、@search = "Apple"を使用すると、最終的に%Apple%になります

116
Deleteman

Rails のように見えます。

Topic.where("name ILIKE ?", "%Apple%")
10
ScottJShea

PostgreSQLでは、 一致演算子 も使用できます。

Topic.where("name ~* ?", @search)
8
Szymon Rut

そのような文字列を直接入れないでください。 SQLインジェクションと呼ばれます。代わりに.whereを使用する必要があります。

Topic.where("name like '?%' ", params[:name])
8

試してみる

Topic.where("name like ?",'%Apple%')
Topic.find(:all, :conditions => ["name like ?","%Apple%"])
1
asitmoharna