2010-02-01 3 views
0

J'essaie d'utiliser le plugin Whenever pour les rails pour effectuer un processus de modèle à certains moments.Erreur lors de la soumission du processus de courrier personnalisé (à chaque fois que le plugin)

Lorsque j'essaie d'utiliser le processus mail_out dans mon modèle utilisateur, j'obtiens l'erreur suivante. Quelqu'un peut-il me diriger dans la bonne direction de ce qui ne va pas?

/var/lib/gems/1.8/gems/rails-2.3.5/lib/commands/runner.rb:48: /var/lib/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:1567:in `find_from_ids': Couldn't find User without an ID (ActiveRecord::RecordNotFound) 
    from /var/lib/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:616:in `find' 
    from /home/tnederlof/Dropbox/Ruby/daily_trailer/app/models/user.rb:9:in `mail_out' 
    from (eval):1 
    from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `eval' 
    from /var/lib/gems/1.8/gems/rails-2.3.5/lib/commands/runner.rb:48 
    from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' 
    from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require' 
    from script/runner:3 

Mon schedule.rb est la suivante:

every 1.day, :at => '5:30 am' do 
    runner "User.mail_out" 
    end 

Mon modèle d'utilisateur est:

class User < ActiveRecord::Base 

    acts_as_authentic 

    def self.mail_out 

    weekday = Date.today.strftime('%A').downcase 

    @users = find(:conditions => "#{weekday}sub = t") 

    @users.each { |u| UserMailer.deliver_mail_out(u)} 


    end 

end 

Mon User_mailer est:

class UserMailer < ActionMailer::Base 
    def mail_out(users) 
    @recipients = { } 
    users.each do |user| 
     @recipients[user.email] = { :name => user.name } 
    end 


    from  "[email protected]" 
    subject  "Check out the trailer of the day!" 
    body  :user => user 
    end 

end 

Migration:

create_table "users", :force => true do |t| 
    t.string "email" 
    t.date  "birthday" 
    t.string "gender" 
    t.string "zipcode" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.string "crypted_password" 
    t.string "password_salt" 
    t.string "persistence_token" 
    t.string "mondaysub",   :default => "f", :null => false 
    t.string "tuesdaysub",  :default => "f", :null => false 
    t.string "wednesdaysub",  :default => "f", :null => false 
    t.string "thursdaysub",  :default => "f", :null => false 
    t.string "fridaysub",   :default => "f", :null => false 
    t.string "saturdaysub",  :default => "f", :null => false 
    t.string "sundaysub",   :default => "f", :null => false 
    end 

Répondre

1

Modifier ceci:

find(:conditions => "#{weekday}sub = t") 

à

find(:all, :conditions => "#{weekday}sub = t") 
+0

/var/lib/gems/1.8/gems/rails-2.3.5/lib/commands/runner.rb:48: /var/lib/gems/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract_adapter.rb:219:in 'log ': SQLite3 :: SQLException: aucune colonne de ce type: t: SELECT * FROM" utilisateurs "WHERE (mondaysub = t) (ActiveRecord :: StatementInvalid) Une idée sur la façon de procéder? –

+0

À quoi ressemble votre migration? Essayez 'find (: all,: conditions => [" # {days} sub =? ", True])' – jonnii

+0

J'ai ajouté mon schéma ci-dessus. J'ai essayé la deuxième suggestion et j'ai obtenu: /var/lib/gems/1.8/gems/rails-2.3.5/lib/commands/runner.rb:48: /var/lib/gems/1.8/gems/activesupport- 2.3.5/lib/support_support/dependencies.rb: 380: dans 'load_without_new_constant_marking ': /home/tnederlof/Dropbox/Ruby/daily_trailer/app/models/user.rb:9: erreur de syntaxe, inattendu tIDENTIFIER, attendu') ' (SyntaxError) \t @users = find (: all,: conditions => "# {jour de la semaine} sub =" t "") –

Questions connexes