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

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

ただいまの
回答率

90.48%

  • Ruby on Rails 4

    2550questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 508

domingojapan

score 7

前提・実現したいこと

今回、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自体も初心者です。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

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

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

# app/views/analyzes/_anlyzes.html.erb

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


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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Ruby on Rails 4

    2550questions

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