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

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

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

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

1342閲覧

ブラウザ画面でユーザーに入力、設定させた内容を適切に処理する為のapp/views以下のhtml.erbの実装について

domingojapan

総合スコア26

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

1クリップ

投稿2016/06/08 14:11

###前提・実現したいこと
今回、ruby on railsを利用したWebアプリケーションを作ることになりました。
◆前提:
"teratail-server"という外部サーバ内に多数のテキストファイルが保存されているとする。
◆実現したい事:
このWebアプリケーションのユーザは"teratail-server"サーバ内にある多々あるファイル群の中から、
一つのテキストファイルを選択して、"ある処理"を施したい。
(今回はファイルの格納先を”http://teratail-server/2016/06/08/18-33-34/testdata.txt”とします。
"ある処理"はA/Bの2種類存在し、railsのコントローラ内で実装します))

###Webアプリケーションのユーザーに操作させるフロー

◆フロー1:テキストボックスにログファイルの格納先urlを入力させる
(つまりテキストボックスには”http://teratail-server/2016/06/08/18-33-34/testdata.txt”が入力される事になる)
◆フロー2:テキスト解析時に使用する"ある処理"(今回は"ある処理A"/"ある処理B"とする)をユーザに選択させる
ユーザの選択肢としては、
・「ある処理A」のみ選択
・「ある処理B」のみ選択
・「ある処理A/ある処理B」両方選択
の3択(つまり、ある処理A/Bどっちも選ばないという選択肢は無い)
◆フロー3:"解析開始"ボタンをユーザーに押下させる。

###現時点のソースコード(まだHTML側のみですが。。。)
”app/views/analyzes/_anlyzes.html.erb”とする。

<h3>フロー1:解析対象ログの指定</h3> <p> teratail-serverにアップされているログについては格納先Urlを入力してください。 <br> <form action="downloadlog" method="get"> <p><label> teratail-serverのログURL入力: <input type="url" name="url" size="40" maxlength="75"> </label></p> </form> </p> <h3>フロー2:テキストファイル解析に使用するある処理の指定</h3> <p>チェックボックスにチェックをいれてください</p> <h4>ある処理A</h4> <%= check_box_tag :script_a_check %> <%= label_tag :script_a_check, 'ある処理A' %> <br> <h4>ある処理B</h4> <%= check_box_tag :script_b_check %> <%= label_tag :script_b_check, 'ある処理B' %> <h3>フロー3:解析開始ボタンを押してください</h3> <%= button_tag( class: "btn btn-default btn-sm") do %> <%= content_tag :span, "解析開始", class: "glyphicon glyphicon-star", action: "analyze_log"%> <% end %>

###現時点の状況
rails serverを実行すると、画面上は
フロー1のテキストボックス
フロー2の"ある処理A"、"ある処理B"のチェックボックス
フロー3の解析開始ボタン
がブラウザ上ではとりあえず表示されている事は確認できています。

ですが、Controller側がまだ未実装なのでフロー3の"解析開始"ボタンを押下してもだんまりです。
(そりゃそうだ)

###質問事項
Controllerにて実装したい処理としては
フロー3の"解析開始"ボタンが押下されたら
・フロー1のテキストボックスに書かれているファイル格納先にアクセスしてファイルを取得する
・フロー2の"ある処理A/B"各々のチェックボックスにチェックがついているかの確認する
で、チェックがついている"ある処理"を実行する
という処理となります。

その場合”app/views/analyzes/_anlyzes.html.erb”にも併せて手を入れる事になると思います。
★★質問1★★:今後の事を考えると、そもそも上記のhtml.erbの実装で問題ないかを知りたいです。
「こんな実装だとControllerの実装面倒臭くない?」とか「こうしたらControllerの実装が楽になるよ」といったアドバイスをいただきたいです。
★★質問2★★:上記の"ある処理"はすでにruby単体としては実装済みで動作検証済みです。
ruby on rails用に移植する場合はControllerフォルダ以下の任意のrbファイルに実装を移植すべきでしょうか?それとも他に適切な場所がありますでしょうか?(実はmodelに置いた方がよいとかlibに置いた方が良いとか)

###補足情報(言語/FW/ツール等のバージョンなど)
・Railsは4.2.1を使用しています
・rubyは2.2.4を使用しています

質問者のレベル:
rubyは1000ステップ程度のコードであれば、不明点はgoogle先生に多少頼りながらも自力で楽しんで書けます。一方、html/cssはおろかruby on rails自体も初心者です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

URL設計とかの突っ込みは抜きにして(システム全体の話になるので)、
まず、viewのformの中に、最後のbutton_tagまでを入れてください。
そうすれば、受け取りアクションで途中のcheck_box_tagの中身が受け取れるようになります。

次に、controllerのアクションとフォームをつなげます。
たとえば、AnalyzesControllerのdownloadlogアクションであれば、formではなく、form_tagで実装します。

Ruby

1# app/views/analyzes/_anlyzes.html.erb 2 3# routes.rbでパスが設定されている前提 4<%= form_tag downloadlog_analyzes_path method: :put do %> 5 <p><label>teratail-serverのログURL入力: <input type="url" name="url" size="40" maxlength="75"></label></p> 6 <h3>フロー2:テキストファイル解析に使用するある処理の指定</h3> 7 <%= check_box_tag :script_a_check %> 8 <%= label_tag :script_a_check, 'ある処理A' %> 9 <%= check_box_tag :script_b_check %> 10 <%= label_tag :script_b_check, 'ある処理B' %> 11 <%= submit_tag "解析開始" %> 12<% end %>

これで、パラメータとしてURL情報のストリングとチェックボックスの結果が得られます。
後は、コントローラでパラメータを元に、適当に処理してあげれば良いでしょう。

「ある処理」を受け持つ.rbファイルは、libが適当だと思います。
それをControllerで呼び出して処理してあげればOKでしょう。

Railsはwebアプリケーションなので、単体のRubyアプリケーションとはかなり感じが違います。
HTML,CSS,Javascript等の知識も必要とされるので、
本を一冊読むか、チュートリアルを通しでやってみて、癖をつかんでおくのがいいかと思います。

また、初めのうちは、気になっても見た目の部分には手を出さず、
一通り動くようになってから見た目の調整にかかった方が問題が起きにくいかと思います。

投稿2016/06/09 06:15

rifuch

総合スコア1901

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問