Rails5.1のあまり知られていない機能
先週、RailsConf 2017中に、Rails5.1が出荷されました。
発表に従えば、最新のJavaScriptとの統合の改善、暗号化されたシークレット、システムテストなどの大きな機能を確認できます。そして、私の個人的なお気に入りがあります:最後に form_for
の奇妙な組み合わせを取り除く およびform_tag
、そしてそれをform_with
に置き換えます 。試してみるのが待ちきれません。
しかし、私がRailsを気に入っている理由は、大きな新機能ではありません。少しずつ、絶え間ない改善です。 Railsアプリを書いているときに私を幸せにするのは、生活の質の変化です。そして、Rails5.1はそれらでいっぱいです。
tag
などのRailsのタグヘルパーを使用しましたか およびcontent_tag
?
<%= content_tag :p, @user.name, class: "name" %>
Rails 5.1は、新しいタグヘルパー構文を追加します。
tag.div
のような呼び出しを使用する またはtag.br
、そしてパラメータの順序について心配するのをやめ、2つの異なる方法をやりくりすることができます:
<%= tag.p @user.name, class: "name" %>
<%= tag.br %>
これらの新しいタグヘルパーはデフォルトでHTML5をサポートし、独自の要素を作成することもできます:
<%= tag.pea @user.name, class: "name" %>
<!-- turns into <pea class="name">Justin Weiss</pea> -->
assert_difference
が大好きです 。 assert_difference
の前 、テストでローカル変数を調整するのに時間がかかりすぎました:
old_score = @user.score
@user.answer_question!(...)
assert_equal old_score + 10, @user.score
assert_difference
を使用 、あなたがやろうとしていることははるかに明確です:
assert_difference "@user.score", 10 do
@user.answer_question!(...)
end
Rails 5.1では、assert_changes
これをさらに一歩進めます。
assert_difference
カウントの変更のみをチェックします。 ただし、assert_changes
2つの文字列間、またはnilと他の何かの間の変更など、数値以外の変更をチェックできます。
assert_changes "users(:justin).name", from: "Justin", to: "Bob" do
@user.update_attributes(name: "Bob")
end
文字列の代わりに、ラムダを指定できます:
assert_changes -> { users(:justin).name }, from: "Justin", to: "Bob" do
@user.update_attributes(name: "Bob")
end
to:
===と比較できるものなら何でもかまいません。 何かを知っているといいですね 価値についてですが、具体的には何であるかわかりません:
assert_changes -> { users(:justin).updated_at }, to: ActiveSupport::TimeWithZone do
@user.update_attributes(name: "Bob")
end
一部のRailsコードでは、delegate
が表示されます 使用される方法。 委任は、継承せずに別のクラスの上に動作を追加する場合に役立ちます:
class Player
delegate :id, :name, to: :@user
def initalize(user)
@user = user
end
def points
Game.points_for_user(user.id)
end
end
ただし、すべてを転送したい場合があります ラッピングしているクラスに。
method_missing
を使用して、Rubyでこれを行う方法はいくつかあります。 またはSimpleDelegator
。 ただし、delegate
との一致を高めるため メソッド、delegate_missing_to
Rails5.1に追加されました。 それはそれが言うことを正確に行います:
class Player
delegate_missing_to :@user
def initalize(user)
@user = user
end
def points
Game.points_for_user(user.id)
end
end
これで、Playerクラスにないメソッドを呼び出すと、@user
が検索されます。 代わりに。
ボーナス:alias_method_chain
なくなった!
Ruby 2で私のお気に入りの機能の1つは、Module#prependです。私はそれがとても好きで、それについての投稿を書きました。具体的には、Module#prependが最終的にalias_method_chain
に置き換わると私が望んでいたことについて 。
およびRails5.1以降、alias_method_chain
現在、正式に廃止されました–prependに置き換えられました。
Railsの新しいバージョンは常にエキサイティングです。 しかし、Railsにその美しさを与えるのは細部です。 毎日書くコードをより幸せにする小さな変更。
それらの変更をどのように見つけますか?変更ログに飛び込みます。興味深いプルリクエストを見てください。新しい小さな5.1の機能のどれがあなたの生活を少し楽にしてくれるか見てみましょう。
そして、クールなものを見つけたら、それを自分のものにしないでください。ここで共有して、私たち全員が新しいことを学ぶことができるようにしてください!
-
iPhoneの名前を変更する方法
ネットワーク上に複数のデバイスがある場合、iPhoneを認識するのが難しいと感じていますか?幸い、iPhoneの名前を変更して、どのリストからでもすばやく簡単に見つけることができます。 Appleは、iPhoneの名前を変更する簡単なオプションを提供しています。次の手順は、その方法を示しています。 なぜiPhoneの名前を変更する必要があるのですか? iPhoneの名前を変更したい理由はさまざまです。 AirDropリストでデバイスを見つけるのに問題があるか、Bluetoothデバイスリストに同じ名前の他のデバイスがあるか、または単に電話に新しい名前を付けたい場合があります。 iPhone
-
iOS14の8つの最高の新機能
2020年9月にリリースされたiOS14は、新機能、ホーム画面のデザインの見直し、既存のアプリのアップデートを誇っています。サポートされているiPhoneをお持ちの場合は、すべての最高の新機能とその活用方法を紹介します。 私のiPhoneはiOS14をサポートしていますか? iPhoneでiOS13を実行できる場合は、iOS 14を実行できます。ただし、一部の古い電話では、最新機能の一部(特にカメラのアップデート)を利用できない場合があります。 iOS 14アップデートでサポートされているiPhoneの完全なリストは次のとおりです(iPhone12ラインにはiOS14がインストールされてい