どうも、アラフォーまきのです。
今日は14回目・・・。しかも12月ですよ。本当に光の速さで毎日が過ぎていく。
さあ今回のことを記録しておきましょう。
前回からの課題
とにかくコードを書き進めることと、Git・GitHubを使ってみることでしたね。
コードは出来るだけ進めました。
GitHubに1日1pushしようと決めていたので、少しはコードを書く努力ができていました。
メンターさんに常にコードの進捗が見えるようになったから、やっぱり手は抜けないですしね(笑)
こういうとき、人からどう見られるかをすごく気にする性格ってのは役にたちます(笑)
さて、各モデルの紐付けが案外うまくいって得意げだったまきのは、どうしてもわからなくて前回レクチャーしてもらったform_withでプルダウン作るのに挑戦しました。
結果は見事にわからなくて、昨日・おととい潰してました。
選択肢の配列データーを、どう書けばRailsさんに伝わるのか判断がつかず。
本当はいつまでもつっかかってないで、メンターさんに聞くかとりあえずできるところを進めておくべきだったのに、なんか悔しくて粘っちゃって。
時間が勿体無いな。
これについては、メンターさんも
「僕もついやっちゃうんだけど、確かに時間が勿体無いから、早めに見切りをつけるっていう訓練もするといいかもね!
案外、寝て目がさめるとサクッとできちゃって、あれはなんだったのか!ってなることあるし。
格言として"いいから寝ろ"ってのは、ほんとあると思うよー」と。
確かにそれ1回経験したわ。プルダウンは目が覚めてもダメだったけどな!
そういえばQiitaでめっちゃいい記事ありましたよね。
せっかくシェアしてもらって、「なるほどな」と思ったのに、実行できていないあたり自分の学習能力・実行力の低さが垣間見えるわけで恥ずかしい限り。
今回の授業
今回は、大枠は以下の2つでした。
1:プルダウンを設定する
2:GitHubのPullRequest
結局解決できなかったところを、メンターさんに見てもらって一緒にやりました。
今回作りたかったのは「公開」「非公開」を書くためのプルダウンの設定。
やったことをざっくりまとめると・・・
- モデルにあるデーターを選択肢として出すわけじゃない。trueかfalseの2択。だからcollection_select ではなくselectが良さそうだ。
- Boolean(ブーレン)を使うといいけれど、これだとtureかfalseの2択のみになる。将来的に例えばFacebookみたいに「友達の友達には公開」みたいなことをするなら、これは使えない。
- 1箇所ではなく色々なところで公開・非公開を書くことになるのは想定がつくから、DRY的に考えて毎回書かずに済むように処理しよう。
- app直下に新しくフォルダ(libraryを意味するlibってのが多いらしい)を作って、そこにRubyのファイルを作ってクラスを作っちゃう。
- DBでは、この公開・非公開を数値=0か1かで管理する。だから、クラス内では定数を用いて、0がPRIVATE=非公開、1がPUBLIC=公開で設定。
class Constants PUBLIC = 1 PRIVATE = 0 def self.options_for_public [['公開', PUBLIC], ['非公開', PRIVATE]] end end
- ビューに表示する内容のことだから、ヘルパーに書くのが良さそうだ。
また、特定のビューではなく、いろんなビューに書くことも想定されるので、どのビューでも使えるようにhelper/apprication_helper.rbへ、さっきの定数を用いたメソッドを書く。
module ApplicationHelper def options_for_public Constants.options_for_public end end
- コントローラに定義してもいいんだけど、ビューに表示する部品類はhelperに書くのが推奨される。最近ではあまり厳密にどっちとは言われなくなりつつあるけれど、一応helperに。
- 対象のhtml.erbファイルにこのメソッドを使って選択肢を書く。
<%= form_with(model: @work ,url:{controller: :work, action: :create, user_id: @user.id} , method: :post , local: true) do |form| %> ・ ・ ・ <%= form.select :public, options_for_public, selected: @work.public %>
これで、公開・非公開の選択肢が作れました。DBへの格納もできた。
★メモ:引数の中身
model・・・対象のモデル
url・・・・form_with内のデーター送信先URL
method・・・リクエストメソッドがGET以外は省略せず、"明示的に"記述する
local・・・trueにすればローカル環境でも画面遷移ができる(ということでいいのかな)
ただ。
<%= form.select :public, options_for_public, selected: @work.public %>
これの、select :public と elected: @hoge.public がどっちがなんなのかわからなくなっちゃった…。どっちかがデーターが入るべきカラムを指定していて、どっちかが選択肢として表示するカラムを指定していたような・・・ちがうような・・・。
ついさっきやったことなのになあ・・・。
該当部分のHTMLソースを見てみると・・・
<select name="work[public]" id="work_public"><option value="1">公開</option><option value="0">非公開</option></select>
だから・・・?えっと???
...こんな感じで大丈夫か!
次回までの課題
出来るだけコードを書く
以上!簡単!
とりあえず、Keynoteでどういう画面にするかは概ねできているので、それにしたがってどんどんページ増やしてそれらしいものをどんどこ書いていくのみです。
遊んだり、やる気でねーとかいってる場合では無いので、とにかく頑張ってコード書きましょう!うおおん。
次回は今度の金曜日。先々週に1回メンターさんの都合合わなくてパスになったので、今週その分取り戻しで2回やることになってるので、次まであまり時間が無いけれど、できるだけ進めておかないとな。
ではでは、さっさとコードを書くことにします。
また金曜日にー。