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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

1回答

1688閲覧

rubyの配列の中にあるオブジェクトを取り出すときのリファクタリング

ayu

総合スコア212

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2016/07/23 07:04

こんにちは。

リファクタリングを行いたいのですが、いい方法が思いつかず、相談です。

状況としては、同一人物の同じ文が投稿された場合に、登録されている文章の長さを比較して、長文に更新するようにしています。

validate :validate_sentence def validate_sentence sentence = body.strip.split(/[。!!\s]/)←文章を文に直す x = sentence.flat_map{ |x| Blog.where('user_id = ? AND body like ?', user_id, "%#{x}%") }←同一ユーザーの文章が登録されているかを探している if x.present? if body.length > x[0].body.length←ここのx[0]がもっといい書き方がありそう short_blog = x[0] ActiveRecord::Base.transaction do short_blog.destroy! Blog.create!(id: short_blog.id, body: body, category_id: short_blog.category_id) end else errors.add(:same_sentence, "はすでに登録されています") end end end

集めた配列が1つしかない状態にしているのですが、その後のx[0]として、取り出しているのをもっと簡潔にしたいです。

何かいい方法はありますでしょうか?m(_ _)m

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

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

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

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

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

guest

回答1

0

ベストアンサー

とりあえず、xに配列をセットせず、配列の最初の要素をセットしておけば[0]はなくせます。

ruby

1 def validate_sentence 2 sentence = body.strip.split(/[。!!\s]/)←文章を文に直す 3 x = sentence.flat_map{ |x| Blog.where('user_id = ? AND body like ?', user_id, "%#{x}%") }.first 4 if x 5 if body.length > x.body.length 6 short_blog = x 7 ActiveRecord::Base.transaction do 8 short_blog.destroy! 9 Blog.create!(id: short_blog.id, 10 body: body, 11 category_id: short_blog.category_id) 12 end 13 else 14 errors.add(:same_sentence, "はすでに登録されています") 15 end 16 end 17 end

投稿2017/05/19 04:48

cameluby

総合スコア891

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問