

  * CMSのコンテンツが全て記載されている場合は、View側でコンテンツを表示する  
という仕様を作るためにhelperメソッドとして下記のようなものを作りました。

※ cms_fragment_content(:text_1)はcomfortable-mexican-
sofaというgemを使ってCMSを構築しており、そこから登録しているテキストを取得してくる際に使うhelperメソッドです。

下記のコードで問題なく all_contents?
というメソッドは動いているのですが、似たようなコードの繰り返しになってしまっており、もう少しスマートにかけないものかな。。と思い、質問を投稿しました。

色々検索してみたのですが、Rubyは初心者ということもあり、うまく動作するスマートな書き方なものを書くことができませんでした。

別の書き方で、もっとシンプルな書き方あるよ！という場合はアドバイスをいただけると幸いです。

[code]

    def all_contents?
      cms_fragment_content(:text_1).present?\
      && cms_fragment_content(:text_2).present?\
      && cms_fragment_content(:text_3).present?\
      && cms_fragment_content(:text_4).present?\
      && cms_fragment_content(:text_5).present?
    end
    
[/code]

view側

[code]

    - if all_contents?
      .contents-class
      （以下略）
    
[/code]


CC BY-SA 4.0
2021-04-14T07:12:35.730
75265
2021-04-14T07:44:37.180
9542
question
ruby-on-rails ruby html slim
Railsのhelperメソッドの書き方をより良いものにしたい


単純に繰り返しを少し減らすだけなら

[code]

    %i(text_1 text_2 text_3 text_4 text_5).all? { |text_n| cms_fragment_content(text_n).present? }
    
[/code]

みたいな感じでは書けそうです（試していません）

`(1..5).all? { |n| ~ }` でもいいかもしれません。


CC BY-SA 4.0
2021-04-14T07:40:03.053
75267
2021-04-14T07:40:03.053
44810
75265
answer


下記のような感じはいかがでしょうか

[code]

    def all_contents?
      (1..5).all? { |i| cms_fragment_content(:"text_#{i}").present? }
    end
    
[/code]


CC BY-SA 4.0
2021-04-14T07:44:37.180
75268
2021-04-14T07:44:37.180
44811
75265
answer