mailer作成 その15

メールの一括削除

メールのフィルターと同じようにリストの各行の先頭にチェックボックスを、またsubmitボタンをリストの終わりに追加。submitボタンが押されたら、コントローラのexec_deletion()メソッドを呼び出すようにした。
コントローラのexec_deletion()は、以下の通り。フィルターの処理より簡単。

  def exec_deletion
    deleting_mails = Array.new
    params.each_key {|key|
      puts key
      if key =~ /^check_/ && params[key]["check"] == "1"
        id = key.sub("check_", "")
        mail = Mail.find(id)
        if mail != nil
          deleting_mails << mail
        end
      end
    }
    deleting_mails.each {|mail|
      mail.destroy
    }
    redirect_to("/list/list")
  end

でも、これだとguestでログインしてもメールを消すことができてしまう。

メールの閲覧制限

guestでログインしたときは、フィルターの操作ができなくて、指定されたフィルターが最初からかかっているようにしたらどうだろうか。
あるいは、フィルターを作成するときに、guestで閲覧可能なフラグを追加し、guestの場合のフィルターのデフォールトは、それらをORしたものにするとか。guestの場合に表示されるフィルターの一覧は、guestで閲覧可能なものだけにする。