kazumalab tech log

流行りとリラックマと嵐が大好きです。技術的ログ。

神戸にいってきましたが...。

かずまです。

先週は神戸にいってきました。
素晴らしくたのしかったです。一部を除いては...。

その一部はごはんです。
せっかく神戸に来たし、神戸牛とか、甘いもの食べたいなぁって思ってたのですが、、、
全然良さそうなお店見つからず。

基本私は結構店選びが苦手なので、

ぐるなび
「Retty」
食べログ

などのグルメサイトで一から検索しても全くいいお店にたどり着いたことがない民なのです。
残念ながら。

しかし、誰かに教えて貰ったお店はかなり行きやすくて、
かつあたりが多いので、いつも教えてもらったらGoogleMapにお気に入りに入れて近くに来たときに行くようにしてます。

そこで!皆さんに協力してもらいたい&使ってください!ということで
スプレットシートに行ったお店でうまかったのがあれば共有してもらいたいのです!

docs.google.com

今のところ一件も入っていませんので、
よろしくお願いします...!!

僕にお力をください!都道府県は問いません!

collection_check_boxesを使ったときにconfirmationのページをどう実装するか

かずまです。

今回collection_check_boxesを使って、formを作っていたときにハマったのでメモします。 ただ、この実装は本当に正しいかは微妙です。参考までにです。

ページの流れ

new -> confirmation -> complete

となっていて、ModelController内にそれぞれのメソッドを生やしています。

blog.kazumalab.com 前回の続きで、has_manyの関係のチェックボックスは簡単に扱えるというメモをのこしました。

collection_check_boxes

複数のチェックボックスを簡単に実装してくれるHelperです。

= f.collection_check_boxes :child_model_ids, ChildModel.all, :id, :name

こんな感じで実装したとします。 もちろん確認ページではチェックボックスは出さないのでhiddenにするのですが、 ただhiddenにするだけはダメでした。

フォームのパラメータとしては

child_model_ids["", "1", "2"]

この形で欲しいわけです。 それに合わせて、

= f.hidden_field :child_model_ids, multiple: true, value: nil
- @model.child_models.each do |child_model|
  = f.hidden_field :child_model_ids, multiple: true, value: child_model.id

こう書いてあげればできました。 multiple: trueを書かないと配列にしてくれないのでつけます。 これでcollection_check_boxesのhiddenを実装ができたと思います。

追記

value: nilを追加する必要がありました。

こんな感じ! なにか間違いがあればご指摘ください!

has_manyの関係でCheckboxを扱うのが超便利だった。(知らなかった)

かずまです。

今日色々1対多な関係で、Checkboxで複数選択させたい場合、 結構面倒だと思ってたのですが、意外となにもしなくてRailsすごい!ってなったのでメモしておきます。

使うのはcollection_check_boxesを使います。

なお、今回は

  • メインのモデルをModelとする
  • ModelはAssociationModelを複数持つ

を前提とします。

Viewでゴニョゴニョ定義します。(引数2つ目のインスタンスは適宜Controllerで作るなりしてください。) すると、checkboxが現れます。

# model/new.html.haml
= f.collection_check_boxes :association_models_ids, AssociationModel.all, :id, :name

あとはControllerのStrong Parameterで

params.require(:model).permit(
    ....
    association_model_ids: []
)

このようなにidの配列をとればOK! あとはいつも通りインスタンスを生成するときにparamsを渡すと中間テーブルを発行してくれる。 便利!

無駄なコードを書かなくても済むのはいい!

結構やりそうなこと

  • 複数のIDをeachなどでぶん回してbuildするとか?(まず今回これやってました)
  • accepts_nested_attributes_forを使う?

参考サイト

ちょっと使い方までは…というところ。 railsguides.jp

とりあえずドキュメントを見ればよかったと…。 だけど公式ではUpdateの例が上がってて、ほんとにこれでいいの?ってなったので実際にやってみました。 ActionView::Helpers::FormOptionsHelper

Lint/AmbiguousBlockAssociationで怒られたお話

かずまです。

Railsで開発していて、Haml-lintで怒られたので、その対処法のメモを残しておきます。

今回怒られたケース

  • formの中のSelect box
  • i18nを使いたいからmapを使う
= f.select :season, Model.seasons.map { |k, _| [t("activerecord.enum.model.season.#{k}"), k] }

こんな感じで書くと、怒られる。

Lint/AmbiguousBlockAssociation: Parenthesize the param
Model.seasons.map { |k, _| [t("activerecord.enum.model.season.#{k}"), k] }
the block will be associated with the Model.seasons.map method call.

ググっても出てこないので、解決してみる。

解決方法

selectとmapのメソッドが曖昧になってるからselectの後ろに()入れろよみたいな感じみたいなので、

= f.select(:season, Model.seasons.map { |k, _| [t("activerecord.enum.model.season.#{k}"), k] })

こうやってすればOK!
これでhaml-lintに怒られないで済みます。

ちゃんとエラーを読んでもなかなかわからない、ググっても出てこないのは結構つらいです。

集中力が切れたので対応してみた 等々力渓谷編

かずまです。

今日は朝モックとスタブについて記事を書いていたのですが、
集中力が切れたので16:00から一人で自然と戯れにいきました。

blog.kazumalab.com

ちなみにこのタイトルはこのブログを参考(パクった)にしています。
ぜひ箸休めにどうぞ!

codehex.hateblo.jp

15:00 ~ 下調べ

今日は朝から川越に行こうかな〜と思っていたのですが、残念ながらゴロゴロしていたら、
11:00ぐらいまで寝てしまっていました。残念。


ですので少しコードをカタカタ書いて、記事書いて〜ってやってたのですが、
集中力が切れてしまいました。


「どこに行こう...」

ということでGoogle検索

「東京 日帰り 一人旅」

検索しました。笑

そこで出てきたのが、「等々力渓谷」でした。

retrip.jp
このサイト。結構便利で色々使ってます。

世田谷のど真ん中にある自然の場所。
家からは乗り換え一回という楽さで行くことができました。

16:00~ 実際にいってみた

ゴルフ橋

まずは入ってすぐに大きな橋があります。
ゴルフ橋というそうです。昔は木製だったみたい。

f:id:kazumalab:20170820213207j:plain

等々力不動尊本堂

奥へ進むと等々力不動尊本堂へ続く道があります。
ここがまた雰囲気のあるライトで照らされていてきれいでした。
f:id:kazumalab:20170820213214j:plain

帰り道と川

帰りに撮影したのですが、ゴルフ橋を望みながら自然の音を堪能できました。
THE・夏という感じの場所でリフレッシュできました。

f:id:kazumalab:20170820213218j:plain

川が流れていて、水の音もまた、涼しさを運んできます。
対抗の人が来ると川に落ちそうで少しドキドキします。笑

いつもは音楽を聞くのですが、ここにいると音楽は必要ありませんでした。

最後に

リフレッシュした、良い週末でした。
なお写真は結構いい感じにしてありますが天気が良ければもっと良かったです。

いつもPCとにらめっこしているのでたまには自然とこうやって戯れるのもいいな
と感じました。次回は富士山とか川越あたりをブラブラしたい!(集中切れたとき!)