Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trial
Dario Hunt
2,245 PointsError posting an action to an array
I'm using rails mailboxer to handle my app's notifications. I've been able to send a notification to single users as outlined in their documentation but I can't figure out how to send a notification to an array of users. In my case, their followers.
I get this error when I try to send to an array:
undefined method `notify_all' for #<Array:0x696faf8>
My Model:
class Update < ActiveRecord::Base
belongs_to :member
belongs_to :updateable, polymorphic: true
attr_accessible :title, :content
after_create :create_notification, on: :create
def create_notification
subject = "#{member.user_name}"
body = "posted a new update <b>#{title}:</b> <p><i>#{content}</i></p>"
updateable.followers.notify_all(subject, body, self)
end
end
My Controller:
class UpdatesController < ApplicationController
before_filter :authenticate_member!
before_filter :load_updateable
before_filter :find_member
def index
redirect_to root_path
end
def new
@update = @updateable.updates.new
end
def create
@update = @updateable.updates.new(params[:update])
@update.member = current_member
respond_to do |format|
if @update.save
format.html { redirect_to @updateable }
format.json { render json: @updateable }
else
format.html { redirect_to @updateable }
format.json { render json: @updateable.errors, status: :unprocessable_entity }
end
end
end
def destroy
@update = Update.find(params[:id])
respond_to do |format|
if @update.member == current_member || @updateable.member == current_member
@update.destroy
format.html { redirect_to :back }
else
format.html { redirect_to :back, alert: 'You can\'t delete this update.' }
end
end
end
private
# def load_updateable
# resource, id = request.path.split('/')[1,2] # photos/1/
# @updateable = resource.singularize.classify.constantize.find(id) # Photo.find(1)
# end
# alternative option:
def load_updateable
klass = [Project, Event].detect { |c| params["#{c.name.underscore}_id"] }
@updateable = klass.find(params["#{klass.name.underscore}_id"])
end
def find_member
@member = Member.find_by_user_name(params[:user_name])
end
end
1 Answer
Dario Hunt
2,245 PointsI figured this one out I just needed to loop through the array and notify each follower
updateable.followers.each { |follower| follower.notify(subject, body, self) }