神戸にいってきましたが...。
かずまです。
先週は神戸にいってきました。
素晴らしくたのしかったです。一部を除いては...。
その一部はごはんです。
せっかく神戸に来たし、神戸牛とか、甘いもの食べたいなぁって思ってたのですが、、、
全然良さそうなお店見つからず。
基本私は結構店選びが苦手なので、
などのグルメサイトで一から検索しても全くいいお店にたどり着いたことがない民なのです。
残念ながら。
しかし、誰かに教えて貰ったお店はかなり行きやすくて、
かつあたりが多いので、いつも教えてもらったらGoogleMapにお気に入りに入れて近くに来たときに行くようにしてます。
そこで!皆さんに協力してもらいたい&使ってください!ということで
スプレットシートに行ったお店でうまかったのがあれば共有してもらいたいのです!
今のところ一件も入っていませんので、
よろしくお願いします...!!
僕にお力をください!都道府県は問いません!
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を実装ができたと思います。
追記
こんな感じ! なにか間違いがあればご指摘ください!
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から一人で自然と戯れにいきました。
ちなみにこのタイトルはこのブログを参考(パクった)にしています。
ぜひ箸休めにどうぞ!
15:00 ~ 下調べ
今日は朝から川越に行こうかな〜と思っていたのですが、残念ながらゴロゴロしていたら、
11:00ぐらいまで寝てしまっていました。残念。
ですので少しコードをカタカタ書いて、記事書いて〜ってやってたのですが、
集中力が切れてしまいました。
「どこに行こう...」
ということでGoogle検索
「東京 日帰り 一人旅」
検索しました。笑
そこで出てきたのが、「等々力渓谷」でした。
retrip.jp
このサイト。結構便利で色々使ってます。
世田谷のど真ん中にある自然の場所。
家からは乗り換え一回という楽さで行くことができました。
16:00~ 実際にいってみた
ゴルフ橋
まずは入ってすぐに大きな橋があります。
ゴルフ橋というそうです。昔は木製だったみたい。
帰り道と川
帰りに撮影したのですが、ゴルフ橋を望みながら自然の音を堪能できました。
THE・夏という感じの場所でリフレッシュできました。
川が流れていて、水の音もまた、涼しさを運んできます。
対抗の人が来ると川に落ちそうで少しドキドキします。笑
いつもは音楽を聞くのですが、ここにいると音楽は必要ありませんでした。
最後に
リフレッシュした、良い週末でした。
なお写真は結構いい感じにしてありますが天気が良ければもっと良かったです。
いつもPCとにらめっこしているのでたまには自然とこうやって戯れるのもいいな
と感じました。次回は富士山とか川越あたりをブラブラしたい!(集中切れたとき!)