質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

3回答

1443閲覧

Rails ひらがな変換とカタカナ変換の両立方法

yupapapa

総合スコア24

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/11/29 06:45

編集2019/11/29 07:36

Railsで検索機能を実装しています。
現在 ひらがな➡︎カタカナ に変換することができます。
そこで、逆の カタカナ➡︎ひらがな にも変換されるようにしたいのですが、下記のコードで実装すると、カタカナ➡︎ひらがな の変換しか実装されません。

def to_kana self.tr('ぁ-ん','ァ-ン') self.tr('ァ-ン','ぁ-ん') end

処理を分けて実装しても同じ結果になります。

def to_kana self.tr('ァ-ン','ぁ-ん') end def to_hira self.tr('ぁ-ん','ァ-ン') end

この二つの変換を同時に、実装させる方法はありますか?ご教授願います。

追記: 検索部分

words = name.to_kana.to_s.gsub(/(?:[[:space:]%_])+/, " ").split(" ") query = (["name LIKE ?"] * words.size).join(" AND ") where(query,*words.map{|w| "%#{w}%"})

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/11/29 06:47

同じ結果になるというコードを提示しましょう。 一部分だけ出されてもどーしよーもないです
guest

回答3

0

この二つの変換を同時に、実装させる方法はありますか?

両方の変換を順を追ってやってしまうと、「ひらがな→カタカナ→ひらがな」、「カタカナ→ひらがな」のように、一度変換されたものが再変換されてしまうので、「カタカナとひらがなを入れ替える」という動作はさせられません。

tr('ァ-ンぁ-ん','ぁ-んァ-ン')のように、両方同時に変換してください。

投稿2019/11/29 06:59

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2019/11/29 07:01

なお、「ぁ-ん」だと、「ヴ・ヵ・ヶ」は範囲外となります。
maisumakun

2019/11/29 07:03

…というより、やりたいことは「かたかなとヒラガナを入れ替える」ということで間違いなかったでしょうか。
yupapapa

2019/11/29 07:22

非常に申し訳ありません。言葉足らずでした........ ひらがな➡︎カタカナ カタカナ➡︎ひらがなしつつ、ひらがな=ひらがな カタカナ=カタカナ にも検索が通るようにしたいです。 tr('ァ-ンぁ-ん','ぁ-んァ-ン') のようにすると、変換はできるようになったのですが、ひらがな=ひらがな のような一致の検索は引っかからなくなってしまいました。 変換に加えて、ひらがな=ひらがな の検索も通すことは可能ですか?
maisumakun

2019/11/29 07:23

変換部分だけで検索部分がないので、なんとも言えません。
yupapapa

2019/11/29 07:37

追記致しました。空白による複数ワードを検索できるようにしています。
yupapapa

2019/11/29 09:25

if文で実装できるかなと考えたのですが(入力ワードがひらがなだったら変換しない。それ以外ならカタカナに変換)実現することは可能ですか?
guest

0

2KOHさんの回答で解決しましたので、ベストアンサーとさせていただきます。指摘、回答してくださった皆さんありがとうございました。

解決方法

SQliteからmysqlに変更
その後、["name LIKE ?"]の部分を["name collate utf8_unicode_ci LIKE ?"]に変更することで、無事実装することができました。

投稿2019/11/29 14:26

yupapapa

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

検索に SQL を使っているなら、SQL を使っていると書いてください。
RDBMS にもよりますが、ひらがなとカタカナを区別しない機能が備わっている場合があり、それを利用するだけで解決する可能性があります。
MySQL なら、まずは「mysql ひらがな カタカナ 区別しない」等で検索してみて、出てきた機能が使えそうかどうか検討してください。

投稿2019/11/29 12:36

2KOH

総合スコア999

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問