トピックという名前のモデルがあり、フィールドとして名前があります。
だから、私が探している用語はAppleだと言ってください。
もし私が
Topic.find_by_name("Apple")
Appleという名前のレコードが返されます。それは良いことですが、find_by_nameを変更して「Apple juice」と「Apple」を検索できるようにするにはどうすればよいですか?基本的に、元のクエリを含む名前または元のクエリと完全に一致する名前を検索しますか?
編集: すべての応答をありがとう。以前はもう少し明確にすべきだったと思いますが、変数名で検索したい場合はどうなりますか(明らかに「Apple」という名前で検索したくないのは明らかです:))。
これに対応するためにTopic.whereを操作するにはどうすればよいですか?のようなもの...
@topic = Topic.where(......., @name)
私はこのような何かがうまくいくと思う:
Topic.where("name like ?", "%Apple%")
編集に対応するには:
Topic.where("name like ?", "%#{@search}%")
基本的な文字列補間、文字列@search
内で%%
の値を使用しているため、@search = "Apple"
を使用すると、最終的に%Apple%
になります
Rails のように見えます。
Topic.where("name ILIKE ?", "%Apple%")
PostgreSQLでは、 一致演算子 も使用できます。
Topic.where("name ~* ?", @search)
そのような文字列を直接入れないでください。 SQLインジェクションと呼ばれます。代わりに.where
を使用する必要があります。
Topic.where("name like '?%' ", params[:name])
試してみる
Topic.where("name like ?",'%Apple%')
Topic.find(:all, :conditions => ["name like ?","%Apple%"])