Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## notifications_controller.rb
- class NotificationsController < ApplicationController
- def create
- notification = Notification.create :user_id => current_user.id, :discussion_id => params[:discussion_id],
- :discussion_type => params[:discussion_type]
- @discussion = notification.discussion
- render :partial => 'form'
- end
- def destroy
- notification = Notification.find(params[:id])
- @discussion = notification.discussion
- notification.destroy
- render :partial => 'form'
- end
- end
- ## notificaton.rb
- class Notification < ActiveRecord::Base
- belongs_to :user
- belongs_to :discussion, :polymorphic => true
- belongs_to :forum, :class_name => 'Forum', :foreign_key => 'discussion_id'
- belongs_to :topic, :class_name => 'Topic', :foreign_key => 'discussion_id'
- end
- ## _form.rhtml
- <% if logged_in? -%>
- Notify on update?
- <% discussion = @discussion if @discussion
- notification = discussion.notifications.find_by_user_id(current_user.id)
- if notification -%>
- Yes | <%= link_to_remote 'No',
- :url => { :controller => 'notifications', :action => 'destroy', :_method => :delete, :id => notification },
- :update => { :success => 'notifications' } %>
- <% else -%>
- <%= link_to_remote 'Yes',
- :url => { :controller => 'notifications', :action => 'create',
- :discussion_id => discussion.id, :discussion_type => discussion.class },
- :update => { :success => 'notifications' } %> | No
- <% end -%>
- <% end -%>
- ## 031_create_notifications.rb
- class CreateNotifications < ActiveRecord::Migration
- def self.up
- create_table :notifications do |t|
- # t.column :name, :string
- t.column :user_id, :integer
- t.column :discussion_id, :integer
- t.column :discussion_type, :string
- end
- end
- def self.down
- drop_table :notifications
- end
- end
- ## notification_test.rb
- require File.dirname(__FILE__) + '/../test_helper'
- class NotificationTest < Test::Unit::TestCase
- all_fixtures
- def test_create_user_watching_forum
- rails = forums(:rails)
- rails.observers<<users(:sam)
- assert_equal 1, Notification.count
- end
- def test_create_user_watching_topic
- sticky = topics(:sticky)
- sticky.observers<<users(:sam)
- assert_equal 1, Notification.count
- end
- def test_remove_user_watching_forum
- test_create_user_watching_forum
- rails = Forum.find(forums(:rails).id)
- rails.notifications.find_by_user_id(users(:sam).id).destroy
- assert_equal 0, Notification.count
- end
- def test_remove_user_watching_topic
- test_create_user_watching_topic
- sticky = Topic.find(topics(:sticky).id)
- sticky.notifications.find_by_user_id(users(:sam).id).destroy
- assert_equal 0, Notification.count
- end
- end
Add Comment
Please, Sign In to add comment