質問: @user.working_history.company_name1 if @user.working_history.present? ``` このように記載した場合は インスタンスが生成されていた場合、 `その属性がなくても` ラベル部分が表示されてしまいます `属性がない場合と、インスタンスがない場合` にラベルを表示させない やりかたはございますでしょうか? ご教授おねがいします。
回答: slimでは`- if 条件式`と書くことで子要素を表示するかどうかの制御ができます。これがヒントとなりそうです。 ``` div -if @user.present? && @user.working_history.present? && @user.working_history.company_name1.present? li = WorkingHistory.human_attribute_name :company_name li = @user.working_history.company_name1 ``` もしdivも表示したくなければ`- if 条件式`をdivの親として書いてもOKです。 条件式が長くなってしまったので `- if @user&.working_history&.company_name1.present?` もしくは後ろのpresent?も省いて `- if @user&.working_history&.company_name1` と置き換えても良さそうです。 `&.` は俗称「ぼっち演算子」と呼ばれているもので、`&.`の左側の変数がnilのときにnilを返す演算子となっています(例:`nil&.abc` は `nil` を返す)。nilじゃないときは普通の`.`と同じ動きをします。 Rails(というよりRuby)では`nil`は`false`として扱われるため条件式の`present?`は省略してもOKです。が、読みやすさが落ちるので省略しない方が好ましいときもあります(人によると思うのでここは自由にしていただいて構いません)。 ここから先は余談なので回答とは無関係なのですが...。liタグを使うときはulタグまたはolタグを親として使うのが一般的です。なのでdivではなくulを使ったほうが規約的に綺麗かなと思いました!