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

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

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

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1005閲覧

[rails]ヘルパーメソッド化したい

gumiPons

総合スコア7

Ruby on Rails

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/09/24 05:18

編集2020/09/24 05:40

前提・実現したいこと

railsのviewファイルの可読性が悪いので、フォームヘルパー化したい。

ここに質問の内容を詳しく書いてください。
viewファイルの内容をフォームヘルパー化しました。
しかし、["10", "2010135152"]など、配列が一緒に表示されてしまい上手く実装できません。
2点の問題があり、なかなか実装できない状況です。参考記事で構いません。アドバイスをお願いします。

reducation_timeは数値を時間に変換して表示させたいと考えています。
integer型かstring型を用いりたいです。
イメージ説明
サイト⇒ http://13.112.211.254/projects

ヘルパー化したいソースコード

viewファイルのコード、汚い・・・

<% @projects.each do |project| %> <tr> <td><%= project.id %></td> <td><%= link_to project.name ,project_path(project) %></td> <td><%= project.status %></td> <td><%= project.number_of_month %>回</td> <td> <% if project.reducation_time >= 60 %> <%= project.reducation_time / 60 %>時間 <%= project.reducation_time % 60 %>分</td> <% else %> <%= project.reducation_time %>分 <% end %> </td> <td> <% if project.number_of_month * project.reducation_time * 12 >= 60 %> <%= project.number_of_month * project.reducation_time * 12 / 60 %>時間 <%= project.number_of_month * project.reducation_time * 12 % 60 %>分</td> <% else %> <%= project.number_of_month * project.reducation_time * 12%>分 <% end %> <% end %>

試したこと

helper.rbでまとめられるか試みる

module ProjectsHelper def reducation_name project_id = '' @projects.each do |project| project_id += project.id.to_s end return raw(project_id) end def reducation reducation_hour = '' reducation_min = '' @projects.each do |project| if project.reducation_time >= 60 reducation_hour += (project.reducation_time / 60).to_s reducation_min += (project.reducation_time % 60).to_s else reducation_min += (project.reducation_time).to_s end end binding.pry return raw(reducation_hour),raw(reducation_min) end end

viewファイルで試しに取り出す

<%= reducation %> <%= reducation_name %>

viewファイルの表示
["10", "2010135152"]

補足情報(FW/ツールのバージョンなど)

Rails 5.2.4.3

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

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

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

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

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

no1knows

2020/09/24 05:26

reducation_timeには具体的にどのようなデータが入っているのでしょうか?
gumiPons

2020/09/24 05:41

reducation_timeはinteger型の数値であり、時間を表示させたいと考えています。 integer型かstring型を用いりたいです。 サイト⇒ http://13.112.211.254/projects
guest

回答1

0

ベストアンサー

こういう感じで書くと期待した結果が得られそうな気がするのですが、いかがでしょうか?

Ruby

1# 1つ目だけ・・・product.reducation_timeは分表示と考えました。 2<td> 3 <% sec = project.reducation_time * 60 %> 4 <%= sec >= 3600 ? Time.at(sec).strftime('%H時間%M分') : Time.at(sec).strftime('%M分') %> 5</td>

参考:https://marketing-web.hatenablog.com/entry/second_to_00-00-00

投稿2020/09/24 07:30

編集2020/09/24 07:33
no1knows

総合スコア3365

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

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

no1knows

2020/09/24 07:31

もっとシンプルな書き方があるかもしれませんが。。
gumiPons

2020/09/29 03:57

便利なメソッドを教えて頂きありがとうございます。かなりコードが短縮できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問