RailsのActiveFormの使い方
categories: Ruby Rails tags: HowTo Programming Rails Ruby
昨日Railsで単一テーブル継承(Single Table Inheritance)の説明の時に作成したメッセージモデルですが、やつは一度に複数のアドレスに送信するものではありません。
でも実際には複数同時に送りたい!!なんて時には、モデルをもう一つかませます。こんな時に間にかますモデルには、ActiveFormを使うと、ValidationとかFormとかも通常のモデル同様行えて良い感じです。
まずはActiveFormプラグインのインストール。(参考:新井選手のブログ)
ruby script/plugin install http://www.realityforge.org/svn/code/active-form/trunk/
mv vendor/plugins/trunk vendor/plugins/active_form
あとはMultiMessageクラスを作成。(ここはほんとはアドレスの切り抜きなんかでもうすこしいろいろしないといけないけど、ここでは省略。)
require 'active_form'
class MultiMessage < ActiveForm
attr_accessor :addresses, :body, :title
def to_single_message from
addresses.each do |address|
message = Message.new
message.title = self.title
message.body = self.body
message.to_user_address = address
message.from = from
unless message.save
return false
end
end
end
validates_presence_of :addresses, :body, :title
end
通常のモデルと異なるのは、attr_accessorで属性を定義してやることくらい。コントローラ側ではこんな感じで使います。
def messages_controller
if @multi_message.valid? &&
@multi_message.to_single_message( @session[:user] )
flash[:notice] = "送信完了"
redirect_to some_where_url
end
end
@active_form_object.valid?でvalidationが実行されます。あとは内部的に適当なモデル(ここではMessageモデル)に変換してDBに保存するメソッドを呼び出して、データを保存すればOK。