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 ['me@whereiwork.com']     from 'testmailerbot@whereiwork.com'     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 ['me@whereiwork.com']     from 'testmailerbot@whereiwork.com'     body :greeting => "WAUW"   end

look like

def request(sent_at = Time.now)     @subject = 'Testing'     @recipients = ['me@whereiwork.com']     @from = 'testmailerbot@whereiwork.com'     @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 Koebbe wrote:

Old Echo 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 Koebbe wrote:

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

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

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

try def create(params)