ActionMailer undefined method `parameters' - Rails 2.1

Hello Rubyists,
I’m currently trying to get email hooked up via ActionMailer, and while
I’ve gotten it to work in the past on Rails 1.2.x, I’m seeing an error
that I’m unfamiliar with.

Right now, I’m just trying to send email from my dev box via the SMTP
server at work.

My development.rb file:
#…snip
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => ‘ourmailserver.whereiwork.com’,
:port => 25
}
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
#…snip

My “Notifications” Model:

class Notifications < ActionMailer::Base

def request(sent_at = Time.now)
subject ‘Testing’
recipients [‘[email protected]’]
from ‘[email protected]
body :greeting => “WAUW”
end

end

The part of my controller that actually sends the mail:
#…snip
def create
@request = Request.new(params[:request])
respond_to do |format|
if @request.save
Notifications.deliver_request
flash[:notice] = ‘Request was successfully created.’
format.html { redirect_to(@request) }
format.xml { render :xml => @request, :status => :created,
:location => @request }
else
#…snip

As you can see, this was all just stubbed out using a scaffold
generator.

Now - when I go to create a “Request”, the record is created and that’s
all good, but I’m greeted with this monstrosity:

NoMethodError in RequestsController#create
undefined method `parameters’ for {:greeting=>“WAUW”}:Hash

/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/base.rb:301:in
template_format' /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/template_finder.rb:138:in pick_template_extension’
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/template.rb:68:in
set_extension_and_file_name' /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/template.rb:15:in initialize’
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/base.rb:245:in
new' /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/base.rb:245:in render_file’
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_view/base.rb:269:in
render' /Library/Ruby/Gems/1.8/gems/actionmailer-2.1.0/lib/action_mailer/base.rb:541:in render’
/Library/Ruby/Gems/1.8/gems/actionmailer-2.1.0/lib/action_mailer/base.rb:533:in
render_message' /Library/Ruby/Gems/1.8/gems/actionmailer-2.1.0/lib/action_mailer/base.rb:478:in create!’
/Library/Ruby/Gems/1.8/gems/actionmailer-2.1.0/lib/action_mailer/base.rb:439:in
initialize' /Library/Ruby/Gems/1.8/gems/actionmailer-2.1.0/lib/action_mailer/base.rb:383:in new’
/Library/Ruby/Gems/1.8/gems/actionmailer-2.1.0/lib/action_mailer/base.rb:383:in
method_missing' app/controllers/requests_controller.rb:44:in create’
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:1162:in
send' /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:1162:in perform_action_without_filters’
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/filters.rb:580:in
call_filters' /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/filters.rb:573:in perform_action_without_benchmark’
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/benchmarking.rb:68:in
perform_action_without_rescue' /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/benchmarking.rb:68:in perform_action_without_rescue’
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/rescue.rb:201:in
perform_action_without_caching' /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/caching/sql_cache.rb:13:in perform_action’
/Library/Ruby/Gems/1.8/gems/activerecord-2.1.0/lib/active_record/connection_adapters/abstract/query_cache.rb:33:in
cache' /Library/Ruby/Gems/1.8/gems/activerecord-2.1.0/lib/active_record/query_cache.rb:8:in cache’
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/caching/sql_cache.rb:12:in
perform_action' /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:529:in send’
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:529:in
process_without_filters' /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/filters.rb:569:in process_without_session_management_support’
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/session_management.rb:130:in
process' /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:389:in process’
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.4/lib/mongrel/rails.rb:76:in
process' /Library/Ruby/Gems/1.8/gems/mongrel-1.1.4/lib/mongrel/rails.rb:74:in synchronize’
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.4/lib/mongrel/rails.rb:74:in
process' /Library/Ruby/Gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:159:in process_client’
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:158:in each' /Library/Ruby/Gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:158:in process_client’
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:285:in run' /Library/Ruby/Gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:285:in initialize’
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:285:in new' /Library/Ruby/Gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:285:in run’
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:268:in
initialize' /Library/Ruby/Gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:268:in new’
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:268:in run' /Library/Ruby/Gems/1.8/gems/mongrel-1.1.4/lib/mongrel/configurator.rb:282:in run’
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.4/lib/mongrel/configurator.rb:281:in
each' /Library/Ruby/Gems/1.8/gems/mongrel-1.1.4/lib/mongrel/configurator.rb:281:in run’
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.4/bin/mongrel_rails:128:in run' /Library/Ruby/Gems/1.8/gems/mongrel-1.1.4/lib/mongrel/command.rb:212:in run’
/Library/Ruby/Gems/1.8/gems/mongrel-1.1.4/bin/mongrel_rails:281
/Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:502:in
load' /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:502:in load’
/Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:354:in
new_constants_in' /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:502:in load’
/Library/Ruby/Gems/1.8/gems/rails-2.1.0/lib/commands/servers/mongrel.rb:64
/Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:509:in
require' /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:354:in new_constants_in’
/Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:509:in
`require’
/Library/Ruby/Gems/1.8/gems/rails-2.1.0/lib/commands/server.rb:39

Any help with this is much appreciated! : )

I’m not an ActionMailer expert, but shouldn’t

def request(sent_at = Time.now)
subject ‘Testing’
recipients [‘[email protected]’]
from ‘[email protected]
body :greeting => “WAUW”
end

look like

def request(sent_at = Time.now)
@subject = ‘Testing’
@recipients = [‘[email protected]’]
@from = ‘[email protected]
@body[:greeting] = “WAUW”
end

Peace,
Phillip

Hi Phillip,
Thank you for the fast reply. In the past, that’s what it used to look
like, yes. Past == other older applications (Rails 1.2.x was the last I
used to do mail).

But I generated this using the script/generate mailer in Rails 2.1, so I
would assume that ActionMailer’s been refactored to use methods for
assigning subject, etc. rather than instance variables?

Thanks,
kodama

Phillip K. wrote:

I’m not an ActionMailer expert, but shouldn’t

def request(sent_at = Time.now)
subject ‘Testing’
recipients [‘[email protected]’]
from ‘[email protected]
body :greeting => “WAUW”
end

look like

def request(sent_at = Time.now)
@subject = ‘Testing’
@recipients = [‘[email protected]’]
@from = ‘[email protected]
@body[:greeting] = “WAUW”
end

Peace,
Phillip

Old E. wrote:

Hi Phillip,
Thank you for the fast reply. In the past, that’s what it used to look
like, yes. Past == other older applications (Rails 1.2.x was the last I
used to do mail).

But I generated this using the script/generate mailer in Rails 2.1, so I
would assume that ActionMailer’s been refactored to use methods for
assigning subject, etc. rather than instance variables?

Thanks,
kodama

I haven’t done anything with 2.1 yet as a plugin I use (Malline) is not
2.1 ready. I’ve used the notation I posted with 1.2.x and 2.0.2
successfully. Surprised it got changed. I’ll have to do some digging to
see what other surprises 2.1 holds.

Sorry to have wasted your time.
Phillip

No worries - I’m glad to have gotten an answer. Who knows - I’ll try and
change it to see if maybe it’s “legacy compatible”. :smiley:

Phillip K. wrote:

I haven’t done anything with 2.1 yet as a plugin I use (Malline) is not
2.1 ready. I’ve used the notation I posted with 1.2.x and 2.0.2
successfully. Surprised it got changed. I’ll have to do some digging to
see what other surprises 2.1 holds.

Sorry to have wasted your time.
Phillip

Can you post line 44 of your requests_controller (or the code around
line 44)

app/controllers/requests_controller.rb:44:in `create’

On Jun 10, 11:58 am, Old E. [email protected]

A screencast I stumbled upon recently just completed an ActionMailer
episode.

http://www.buildingwebapps.com/podcasts/19-adding-a-contact-form-and-mailer/show_notes
http://s3.amazonaws.com/lr_screencasts/learningrails-18.mov

Hope this helps a bit.

Regards
Kieran

On Wed, Jun 11, 2008 at 6:58 AM, Old E.
[email protected]

try
def create(params)