2010-10-18 6 views
0

J'ai trois classes avec les associations suivantes:Impossible d'utiliser les associations ActiveRecord Rails 3 dans la CISR

class Technician < ActiveRecord::Base 
    has_many :tickets 
    has_many :services, :through => :tickets 
end 

class Ticket < ActiveRecord::Base 
    belongs_to :technician 
    has_many :services 
end 

class Service < ActiveRecord::Base 
    belongs_to :ticket 
    belongs_to :technicians 
end 

Lorsque je tente d'utiliser les associations CISR je reçois des messages d'erreur ci-dessous:

tech = Technician.first 
ticket1 = Ticket.new 
tech.ticket1 

NoMethodError: undefined method `t1' for #<Technician:0xa0d6d6c> 
from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/activemodel-3.0.0/lib/active_model/attribute_methods.rb:364:in `method_missing' 
from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.0/lib/active_record/attribute_methods.rb:46:in `method_missing' 
from (irb):7 
from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.0/lib/rails/commands/console.rb:44:in `start' 
from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.0/lib/rails/commands/console.rb:8:in `start' 
from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.0/lib/rails/commands.rb:23:in `<top (required)>' 
from script/rails:6:in `require' 
from script/rails:6:in `<main>' 

Suis-je une mission ou une erreur?

Répondre

2

Oui, vous faites quelque chose de mal. Vous devriez lire cette première: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

Dans ce cas particulier, vous vouliez sans doute faire quelque chose comme ceci:

tech = Technician.first 
tech.tickets << Ticket.new 
tech.tickets.last 
.... 
+0

merci beaucoup ... ça a marché ... j'ai lu à travers l'API mais je ne pouvais pas voir comment vous utiliseriez réellement les associations. Merci pour la réponse – anthony

0

Je pense la modélisation des relations pourrait être désactivée. Voici comment je les modèle:

class Technician < ActiveRecord::Base 
    has_many :tickets 
    has_many :services, :through => :tickets 
end 

class Ticket < ActiveRecord::Base 
    belongs_to :technician 
    belongs_to :service 
end 

class Service < ActiveRecord::Base 
    has_many :tickets 
    has_many :technicians, :through => :tickets 
end 

Bien sûr, je ne sais pas les détails de votre mise en œuvre, c'est donc, au mieux, une supposition.

La syntaxe de Buru pour utiliser les associations est correcte.

Questions connexes