2009-08-31 14 views
2

私のRailsモデルとコントローラコードの両方が、ファイルシステムにファイルを書き込む必要があります。Railsでモデルとコントローラ間でコードを共有するには?

ロジックを1つの方法に統合したいと考えています。

モデルとコントローラ間でこのメソッドを共有するにはどうすればよいですか?

ありがとうございます!

答えて

2

私はコントローラがファイルシステムへのファイルの実際の実行をモデルに延期すると思います。コントローラは、そのコードをいつ実行するかを決めることができますが、コードの実装に責任を負うべきではありません。そのため、コードは実際にはモデル内にしか存在しません。

+0

ありがとう、マシュー。 問題は、モデルがレンダリングコールの内容を含むファイルを書き込む必要があることです。言い換えれば、私はEmail :: Showでレンダリングされたページのディスクに静的なバージョンを書いています。 お勧めですか? – Crashalot

+0

私はあなたが達成しようとしていることを完全に理解しているかどうかはわかりませんが、あなたのコントローラーは何を書き込むべきかを知っているように見えます。モデルからファイル書き込みメソッドを使用して、コントローラから渡されたデータを取得してファイルシステムに書き込むことができるだけです。私がその点を完全に忘れているなら、私に知らせてください。私は私の回答を修正するために最善を尽くします。 –

+0

OKです。私の質問は、電子メールモデルがファイルパスとファイルを書き出す方法を知っているにもかかわらず、URLを生成する方法がわからないということです(電子メールを削除するために電子メールが特別なトークンを必要とし、 )? URLの場合は、コントローラまたはビューからURLを生成し、電子メールモデルから必要なデータを渡すと考えられます。 ファイルシステムでは、データをモデルに渡して、電子メールモデル内でファイルパス(およびファイル)を生成すると仮定しています。 これは意味がありますか? – Crashalot

2

これを本当に行う必要がある場合は、モジュールを/ libに、includeを必要に応じて配置することができます。

ただし、可能であれば、モデルで処理する必要があります。より詳細な情報を提供できる場合は、あなたを正しい方向に向ける方が簡単です。

+0

ありがとう、マシュー。 問題は、モデルがレンダリングコールの内容を含むファイルを書き込む必要があることです。言い換えれば、私はEmail :: Showでレンダリングされたページのディスクに静的なバージョンを書いています。 お勧めですか? – Crashalot

+0

私はそれをレーダーの推奨事項としてお勧めし、レンダリングの文字列表現をパラメータとしてモデルに渡して、ファイルに書き出します。コントローラーが何をレンダリングするかを決定するそのような方法で、モデルはそれをどうするかを決定します。ありがとう、みんな、 –

+0

問題がシフトしました:私はActionMailer :: receiveを介して受信メッセージを処理しています。このメソッドは、あるユーザが電子メールを受け取ったときにqmailによって実行されるスクリプトを通して呼び出されます。残念ながら、ActionMailerモデルの中からrender_to_string()にrender()を呼び出す方法がありません...どうすれば、静的なファイルをディスクに書き込むことができますか? – Crashalot

関連する問題