SakuraWi - BLog

WEBエンジニア。聴いたお話をまとめておく倉庫的な。スタックストックスタック!

フォームオブジェクト

フォームオブジェクトを書く理由、それはすなわち
fatになるcontrollerをスリムにするためである。

controllerには,searchメソッドなどを書きがちで、どんどん肥大化する傾向にある

def search
   @hoge = Hoge.where(id: XXX) if id.present?
   @hoge = @hoge.where(name: XXX if name.present?)
end

みたいなのが増えがち。

そのため、FormObjectを作成して、このロジック部分を切り出してやる。 ちなみに、search関係はモデルに書くというスリム化の方向性もあるが、どちらにせよfatになってしまうのは逃れられないケースが多々。

Ruby on RailsのFormが単体のモデルに依存しないような場合や、フォーム専用の特別な処理をモデルに書くべきではないといった場合はForm Class(Form Object)を作る手法があります。合わせてオリジナルのフォームビルダを作成してViewへのロジックの記述量を減らす手法を紹介します。

RailsのForm ClassとForm builder | 酒と涙とRubyとRailsと

この記事、よい。

初心者にとってありがたい。 [初心者向け] RubyやRailsでリファクタリングに使えそうなイディオムとか便利メソッドとか - Qiita

LINEモバイルデビューしたい

LINEpay使ってみるとあまりにも便利なもので、2%還元という驚異的な還元率でなんだか幸せになっております。

auでiphone6Sを使っているんですが、sim変えてみたいなーなんて思い始めました。

lineよさげだから、LINEモバイル使ってみようかななんて考えてます。 ちょうど、来月でau2年目だし、ぴったりだ。

実際回線スピードは落ちるかもしれないけど、SNS使い放題、とするとかなり便利なのでは...?

とりあえず変えてみようとしてます。

宝石の国が面白すぎた

超面白い。

よくわからない正体不明な敵がちょいちょいやってきて、撃退しつつ世界の秘密が明らかになっていく系。

初見でガンツとかそのあたりにあった、「ようわからんけどおもろい」がこの作品にはある。

登場する主人公たちは、鉱石に命が宿っている、というような設定で、人間ではない。

女の子(正確には違うぽい)が、制服みたいなものと刀一本で戦うっていうのもよいっすね。普通に考えたらわけわからないんだけど。

kindleで全巻セットで買っちゃった... 1巻は今だと無料で読めるので、「お」と思えば7巻まで買っちゃうとよさげ 今だけ108円引きとかで、一巻あたり540円で買えちゃう。

漫画でこんなに衝動買いしたのって進撃の巨人ぶりくらいなきがする。

今週のお題「お弁当」

www.youtube.com

ポートフォリオの考え方

最近ちょっとポートフォリオ、について考えることがあって、ちょうど深津さんがツイートしていたので、ここでシェア。

作品ポートフォリオの作り方 | 深津 貴之 (fladdict) | note

誰に、何を見せるか?(つくるか)
ちゃんと考えて用意することは大事だな。

エンジニアだとgithubがポートフォリオのようなものかもしれないけど、ブログや紹介ページを持っておくのも、伝えやすくなる気がして良い気がしますな。

発表会でもこの考え方は使えると思います。

Action Viewの概要 を読んだ

6.6 CaptureHelper

テンプレートの一部を変数に保存することができる

6.6.2 content_for

他のテンプレートでも呼び出しが可能になる

6.9 FormHelper

きたか、という感じ

チュートリアルでも出てくるし、必読箇所ですね

paramsあたりに関しては最初はまっっっっったくわからないので、なんどもやっているうちに感覚がつかめます。 近道はなさそう。

6.13.4 number_to_phone

gemでハイフンいれるの探したりしていたけど基礎的なものはこれで代用できそう

レイアウトとレンダリング railsガイド

2.2.1 Action Viewを出力する

render "edit"
or
render :edit

はedit.html.erbなどのテンプレートの呼び出しを行う

layoutの指定

class ApplicationController < ActionController::Base
  layout "main"
  #...
end

などの方法で設定が可能。 個々のレイアウトも設定が可能

3.5 ネストしたレイアウトを使用する

<% content_for :stylesheets do %>
  #top_menu {display: none}
  #right_menu {float: right; background-color: yellow; color: black}
<% end %>

cssを渡すことで制御することも可能

Rails国際化 (I18n) API

tとl

I18n.t
I18n.l Time.now

は、

translate # 訳文を参照する
localize  # DateオブジェクトやTimeオブジェクトを現地のフォーマットに変換する

の意味

遅延読み込み

I18のバックエンドは、訳文が初めて参照されるときに遅延読み込みを行います。これにより、訳文を既に公開した後でもバックエンドを他のものに差し替えることができます

3 アプリケーションを国際化する

なるほどお!

Railsはt(translate) ヘルパーメソッドを自動的にビューに追加してくれるので、I18n.tとフルスペルで書かなくても済みます。さらに、このヘルパーは訳文が見つからない場合にエラーメッセージを` でラップして表示してくれます。

ヘルパーによって楽チン表記に

ロケールファイルを新しく追加した場合はサーバーを再起動しないと反映されません。

これかなり注意ですね! なんだかんだで忘れがちです。 サーバーをとめてからrails serverで再起動を忘れないように。

3.2 訳文に変数を渡す

# config/locales/en.yml
en:
  greet_username: "%{message}, %{user}!"

変数を渡してi18nに対応させることも可能

3.5 ローカライズ済みビューテンプレート

スペイン語ローカライズ版 index.es.html.erbをおくことも可能

4.1 訳文の参照

I18n.t :message
I18n.t 'message'

は等価であるので、シンボル呼び出しでも文字列として呼ぶのも同じである

また、スコープの定義も以下は全て同様のものになっている

I18n.t 'activerecord.errors.messages.record_invalid'
I18n.t 'errors.messages.record_invalid', scope: :active_record
I18n.t :record_invalid, scope: 'activerecord.errors.messages'
I18n.t :record_invalid, scope: [:activerecord, :errors, :messages]

シンボル記述ができるのは知らなかった。

デフォルトの値を設定できる

I18n.t :missing, default: [:also_missing, 'Not here']

で設定可能

ビューヘルパーの省略

ビューの時には

= t '.title'

という呼び出しが可能

パーシャルによる自動訳文スコープは、translateビューヘルパーメソッドでのみ使用できます。

4.3 複数形化

複数形にすることも可能

4.5 安全なHTML変換

HTMLを入れ込むことが可能

コードの参照

この記事のコードは

Rails国際化 (I18n) API | Rails ガイド

こちらからお借りしています。