0

これは2つの質問です。

ニュース記事の作成など、ユーザー入力を受け入れるRoR(3.0.7)アプリケーションがあります。これまでのところ、ユーザーは信頼されているため、ユーザー入力はプレーンXHTMLでした。ただし、XHTMLでWebサイトに投稿を作成するのは一部のユーザーにとって難しいため、テキスタイルへの移行を試みます。

テキスタイルを使用するために、RedClothをインストールしました。

既存のニュース記事をテキスタイルに変換することはありません。これは、データを統一するための正しい方法であると私は知っています。そのため、特定の日付以降にのみコンテンツにRedClothを使用する予定です。

ビューでは、created_atの日付をチェックし、出力する前にRedClothを呼び出すという条件があります。ただし、それは、すべてのビューを繰り返し処理し、その特定のコンテンツを提示するたびに条件を挿入する必要があることを意味します。複製する必要のあるコードを最小限に抑えるヘルパーを作成することもできます。

それを実行してDRYを維持する代わりに、ロジックをモデルに移動することにしました。モデルには、articlecontentという列があります。私が思いついたのは以下のコードで、これまでのところうまくいくようです。

def articlecontent
  if !self.new_record? && created_at.to_datetime > 'YYYY.MM.DD'.to_datetime
    articlecontent_in_textile = self[:articlecontent]
    articlecontent_in_html = RedCloth.new(articlecontent_in_textile, [:filter_html]).to_html
    return articlecontent_in_html
  else
    return self[:articlecontent]
  end
end

だから私の質問は:

1)これは正しい方法ですか?または、ある種のViewHelperを定義する必要がありますか?

2)おそらく正当な理由で、モデルのサニタイズヘルパーを呼び出すことができないようです。モデルでヘルパーを呼び出す方法はありますか?

ありがとうマーク

4

1 に答える 1

0

これはモデルではなくビューに実際に属するロジックであるため、ヘルパーを定義することにします。

ただし、使用するマークアップのタイプを返すメソッドをモデルに定義することをお勧めします。

def markup_type
   created_at > MARKUP_CHANGED_DATETIME ? "textile" : "html"
end

MARKUP_CHANGED_DATETIMEを定数にすると、構成ファイルで定義できます。

または、移行を介してモデルに属性を追加しmarkup_type、前のすべての属性を「html」に設定し、将来のすべての属性を「テキスタイル」に設定します。これには、両方を並べて使用し続けることができるという利点があります。または徐々に古いものを変更します。

于 2011-06-30T16:08:31.280 に答える