プログラミング初心者の勉強メモ。

あくまでメモなので、自分が忘れそうなことだけちょこちょこ書いてます。

Herokuに投稿した写真が時間経過すると消える

Herokuで写真投稿のできるアプリを公開したものの、時間が経過すると以前に投稿された画像が消えてしまいます。

解消方法としてはCloudinaryで運用すれば消えないということを教えてもらいました。

が、すでに消えてしまったデータに関しては復元不可なので、再投稿するかHerokuのDBをリセットするしかないらしいです。

over54.hatenadiary.com

 

form_withの動作に関して

twitterクローン作成中

こんな疑問が浮かびました。

app/views/toppages/index.html.erbで、

<% if logged_in? %>

  <div class="row">

    <aside class="col-sm-4">

      <%= form_with(model: @micropost, local: true) do |f| %>

        <div class="form-group">

          <%= f.text_area :content, class: 'form-control', rows: 5 %>

        </div>

        <%= f.submit 'Post', class: 'btn btn-primary btn-block' %>

      <% end %>

    </aside>

    <div class="col-sm-8">

      <%= render 'microposts/microposts', microposts: @microposts %>

    </div>

  </div>

<% else %>

  <div class="center jumbotron">

    <div class="text-center">

      <h1>Welcome to the Microposts</h1>

      <%= link_to 'Sign up now!', signup_path, class: 'btn btn-lg btn-primary' %>

    </div>

  </div>

<% end %>

というコードの

<%= f.submit 'Post', class: 'btn btn-primary btn-block' %>

の部分。

解説によると、「このフォームより Micropost を投稿できるようにmicroposts#createとしてcreateアクションを実装する」と書いてあるが、なぜtoppages.index.html.erbのページからいきなりMicropostsContorllerのcreateアクションへ飛べるのでしょうか...?

自分の中では、link_toメソッドのように、コード内にリンク先が明示されているのであれば理解出来るのですが、f.submitで作ったボタンを押すだけでmicroposts#createに飛ぶのがなぜか分からなくなってしまいました。

 

メンターの方からの回答

メンターの方に聞いたところ、非常にわかりやすい回答をいただきました。

以下その回答です。(一部抜粋)

form_withの動作の話ですね。

フォームの投稿先のURLは、ボタンのタグではなく、formタグに記載されます。

 

form_withメソッドは、model引数*1が渡されると、その内容からURLとHTTPメソッドを自動で決めます。

ここではまだ保存されていないMicropostクラスのインスタンスなので、/micropostsへのPOSTメソッドのリクエスト送信になる、という感じです。

実際に作られたHTTPを、ブラウザの「検証」や「ページのソースを確認」で見てみると良いでしょう。

 

「これ以上の説明はない」というくらいわかりやすい解説をいただきました。

ありがとうございます。

*1:今回なら<%= form_with(model: @micropost, local: true) do |f| %>の"model: @micropost "という部分でmodelの引数を渡している

techacademyのフロントエンドコースを受講中

ただの愚痴。

 

Javascriptが難しすぎる

解説が簡素すぎてわからない。

全体的にわからないので、結局「何がわからないのかわからない状態」に入ってしまった。

この状態だと質問内容考えるのも一苦労。(どこから何を質問して良いかもわからない)

うーん。困った。

とりあえず調べる

ひとまず分からない原因を発生させるIT用語等を自分で調べるが、用語の理解が出来てもなぜそのような動作をするかといった根本的な解決につながることが少ない。

最終手段としてLesson名や課題内容、参考コードそのものを検索にかけて、同じ苦しみを味わっている人を探すことで疑問点の解消を目指すことにした。

苦しいのは皆同じだった...!

すると、やはり同じ苦しみを味わっている人はそこそこいた。

そして動作理由のわからない箇所が「解決済みの質問」としていくつもあるではないか。

おかげで苦しんだ先人の方々がもらった質問回答レビューを参考にしながらコードを作成した。正直回答レビューには課題の答えに近いものもあり、カリキュラム内でも「検索で丸写ししないように」と注意喚起がされているが、これを見なかったら答えを導き出す前に心折れていただろう。

ただ「丸写しして終わり」だと身になっていないことは確かなので、なぜそのようなコードが書かれているかの理解はできるまで調べることにした。

プログラミングには思考力が大切なのはもちろんですが、未経験者はまず基礎知識として参考コードをたくさん見ることの方が大切だなーと思わされた今日この頃。

techacademyを検討される方は、受講の前にはProgate等で基礎知識を入れておきましょう。

僕は中途半端に勉強した状態で乗り込んだら死亡したので。

herokuでseeds.rbを反映させたい

この通りしたらできた。

qiita.com

概要としては、管理者(admin)のUserをseeds.rbを利用し初期設定したのですが、このUserデータをherokuに反映できませんでした。

ということでheroku run rake db:seedでherokuにもseeds.ebのデータを反映させるコマンドを実行したら解決しました。