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

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

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

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

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

Q&A

解決済

2回答

837閲覧

Ruby・Sinatraでの検証の書き方がイマイチ

tanaka_kana

総合スコア12

Ruby

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

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

0グッド

0クリップ

投稿2019/06/07 08:21

現在Sinatraで記事投稿画面の制作をしています。
記事をmarkdownで入力し、その中に画像タグを追加する場合(複数可)はその画像もformにて送信する、という処理を作っています。

流れとしては記事内に画像タグがあればinputタグを生成して、記事内の画像タグ数とフォームにて送られてくる画像の数が正しいかと画像自体の検証(jpgやpngであるかなど)を行い、次に記事の内容の検証、それらがすべてOKならDBに保存。
記事内に画像がなければ記事の検証のみにしてDBに保存、という感じの分岐をしています。

これらの処理をコードに落とすと、どうしてもメインの処理(DBに保存する)とそれらがダメだった場合のレンダリングを二回記述する事になってしまいます。

Ruby

1 2@post = { 3 tite: params[:title], 4 body: params[:body] 5} 6 7unless params[:file].nil? 8 # postはモデルを持っているためvalid?で検証、画像ファイルは自作メソッドで検証 9 if file_valid?(@post.body, params[:file]) && @post.valid? 10 # 画像を保存してredirect 11 else 12 # render :index 13 end 14else 15 if @post.valid? 16 # 画像を保存してredirect(上と全く同じ処理) 17 else 18 # render :index 19 end 20end

可読性や冗長性・メンテの面でなんかとってもイマイチな感じなのですが、これは良い書き方でしょうか?
これをもっと上手く書く方法があれば、教えて頂けると助かります。

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

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

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

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

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

guest

回答2

0

ベストアンサー

ruby

1if (params[:file].nil? || file_valid?(@post.body, params[:file])) && @post.valid? 2 # 画像を保存してredirect 3else 4 # render :index 5end

余談ですが、unlessに対するelseはややこしいのでif elseに書き直した方が素直です。

投稿2019/06/07 09:34

asm

総合スコア15147

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

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

tanaka_kana

2019/06/07 12:45

前回に引き続き、回答有難うございます。感服致しました。
guest

0

params[:body], params[:file] が正しい組み合わせなのかチェックする関数を一つにしたほうが良いと思いますよ?

ruby

1# 問題があれば false を返す 2def is_valid_post?(body, file) 3 # 投稿に関するチェック 4 if file 5 # 添付ファイルがある場合の追加チェック項目 6 end 7 true 8end 9 10if is_valid_post?(params[:body], params[:file]) 11 # 保存 12else 13 # エラー表示 14end

投稿2019/06/07 10:27

mather

総合スコア6753

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問