1. ホーム
  2. ruby-on-rails

[解決済み】railsの部分テンプレートでオプションのローカル変数:(defined? foo)の混乱から抜け出すには?

2022-04-02 15:38:12

質問

私は悪い子で、パーシャルテンプレートの中で以下の構文を使い、パーシャルのレンダリング時に :locals ハッシュで明示的に値が定義されていない場合、ローカル変数にデフォルト値を設定しました --。

<% foo = default_value unless (defined? foo) %>

これは最近まではうまくいっていたようですが、(何の理由もなく)パスされていない変数が(未定義ではなく)nilに定義されているかのように動作するようになりました。

SOの様々な親切な方々からのご指摘の通りです。 http://api.rubyonrails.org/classes/ActionView/Base.html 曰く ではなく を使用します。

defined? foo

を使用し、代わりに

local_assigns.has_key? :foo

私は自分のやり方を修正しようとしていますが、それは多くのテンプレートを変更することを意味します。

この変更は、すべてのテンプレートに適用してよいのでしょうか? 何か気をつけるべき点はありますか? どれくらいの頻度でテストをすればいいのでしょうか?

どのように解決するのですか?

私はこうしています。

<% some_local = default_value if local_assigns[:some_local].nil? %>