2010-08-11 16 views
0

Bonjour tous,objet refuse d'enregistrer les modifications dans Rails CISR

J'ai une association que je travaille, et pour une raison quelconque, je ne peux pas l'obtenir pour enregistrer les modifications à l'objet question quand je débogue dans IRB. Je me demandais si quelqu'un pouvait signaler mon problème.

Voici l'association:

class User < ActiveRecord::Base 
    has_and_belongs_to_many :affiliates 
    has_one :managed_affiliate, :class_name => "Affiliate", :foreign_key => "manager_id" 
end 

class Affiliate < ActiveRecord::Base 
    has_and_belongs_to_many :users 
    belongs_to :manager, :class_name => "User" 
    #The affiliates table has a foreign key field of manager_id 
end 

Quand je lance la CISR, je peux prendre un User.first et Affiliate.first. Je peux très bien définir le managed_affiliate de l'utilisateur. Cependant, quand j'économise, cela ne se reflète pas du tout dans l'affilié - il n'a pas de manager. De même, je peux très bien définir le gestionnaire de l'affilié (Affiliate.first.manager = User.first). Il revient comme si tout allait bien, mais quand je vais le sauvegarder retourne simplement "faux". Si j'activer la fonction d'enregistrement de la CISR, c'est la sortie:

SQL (0.1ms) BEGIN 
SQL (0.2ms) ROLLBACK 

est-il une raison évidente pour laquelle cette association ne sauvera pas correctement?

De plus, voici le schéma de la table des filiales:

create_table "affiliates", :force => true do |t| 
    t.string "name" 
    t.string "website" 
    t.integer "market_id" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.string "logo_file_name" 
    t.string "logo_content_type" 
    t.integer "logo_file_size" 
    t.boolean "track_subs" 
    t.integer "manager_id" 
    end 

Merci pour toute aide.

Répondre

1

ActiveRecord::Base#save retournera false si une validation échoue ou si des rappels before_* sur le modèle retournent faux.

+0

Cela a dû avoir un rapport avec les validations, parce que quand j'ai écrit un formulaire rapide pour ajouter un gestionnaire via un navigateur, cela fonctionne comme un champion. Merci! –