2010-07-19 4 views
0

Tentative d'exécution d'un formulaire d'objet imbriqué. La page se charge sans erreurs, mais lorsque je l'envoie, aucune information n'est enregistrée dans le modèle d'organisation.Autre forme imbriquée de rails question

L'appel SQL dit ce ..

Parameters: {"commit" => "save", "action"=>"update","_method"=>"put", "organization"=>{"likes_snacks"=>"0"}, .. 

Ce qui est juste. Les 1 et 0 peuvent être changés correctement en activant et désactivant la case à cocher. Mais cette information n'est tout simplement pas enregistrée dans la base de données, je suppose. Des idées?

HAML:

- form_for @user do |f| 
    = f.label :username 
    = f.text_field :username 
.clear 
    - fields_for :organization do |org| unless @user.organizations.empty? 
    = org.label :likes_snacks, 'Like snacks?' 
    = org.check_box :likes_snacks 
= f.submit 'save', {class => 'button'} 

Controller:

def edit 
    @user = current_user 
    @organization = current_user.organizations.first 
end 

MODÈLES:

ORGANIZATION.RB:

has_many :users, :through => :organizations_users 

USER.RB:

has_many :organizations, :through => :organizations_users 
+0

mieux si vous pouvez afficher le '' user' et codes modèles organisme' aussi. – randika

+0

Est-ce que le nom d'utilisateur f.text_field: est enregistré dans la base de données? –

+0

@jesse oui oui – Trip

Répondre

2

Il semble que vous pouvez enregistrer les attributs parents mais pas les attributs enfants.

Pour enfant attributs accessibles par une forme imbriqués vous devrez ajouter le « # {CHILD_CLASS_NAME} _attributes » à la méthode attr_accessible dans votre classe parente. (Seulement si l'utilisation attr_accessible dans le modèle parent)

donc votre modèle parent doit ressembler à ceci:

class User < ActiveRecord::Base 
    attr_accessible :username, :organizations_attributes 
    accepts_nested_attributes_for :organizations 
end 

aussi, si vous n'utilisez pas attr_accessible dans votre modèle parent ce n'est pas nécessaire.

+0

Je n'utilise pas attr_accessible dans mon mode Utilisateur. Êtes-vous en train de dire que je n'en ai pas besoin alors dans mon modèle? – Trip

+0

Yah .. pourquoi aussi: nom d'utilisateur être connecté avec: organisations_attributs, ou plus précisément, pourquoi un attribut de l'utilisateur tombe-t-il dans organization_attributes? – Trip

+0

Ah gotcha. J'ai oublié le s. Cela marche!Merci Randika – Trip

1

Je pense que la partie intéressante ici est la table de liens: organization_users.

La réponse acceptée sur cette question si vous dit également besoin

form_for @user do |f| 
    f.fields_for :organization_users do |ff| 
    ff.fields_for :organization 
+0

Ah! Eh bien .. en ajoutant que f avant fields_for aide. Mais je l'ai retourné comme une erreur .. attribut inconnu: organisation_users et quand je l'ai essayé mon ancienne façon je l'ai obtenu attribut inconnu: organisation – Trip

+0

En utilisant "field_for: organizations" (son pluriel), Il retourne cet ActiveRecord :: AssociationTypeMismatch dans UsersController # mise à jour Organisation (# 24980000) expected, got Array (# 101190) – Trip

+0

Est-ce que vous faites "ff.fields_for: organization" --- Je pense que le double ff corrige les problèmes d'attente. –

Questions connexes