2009-10-21 3 views
0

Je reçois un étrange problème avec le code suivant.Obtenir un étrange Nil dans Rails avec Select

La vue (partie):

<p> 
    <%= label :maintenance, :name %> 
    <%= text_field(:maintenance, :name, :size => 20) %> 
</p> 
<p> 
    <%= label :maintenance, :type %> 
    <%= select :maintenance, :type, @m_types %> 
</p> 

Si je retire le text_field ou le déplacer en dessous de la sélection, je reçois un nul pour le: entretien dans la sélection.

la méthode du contrôleur:

def new 
    @log = Log.new 
    @maintenance = Maintenance.new 

    @m_types = Maintenance.types 
    @cars = Car.all 

    print @maintenance 

    if not params[:car].nil? 
@log.car = params[:car] 
    end 

    respond_to do |format| 
    format.html # new.html.erb 
    format.xml { render :xml => @log } 
    end 
end 

Je suppose que ce doit être quelque chose d'étrange d'évaluation Ruby, mais je ne sais pas ce que je cherche. J'ai cherché avec Google, mais ne pas savoir ce que vous cherchez rend très difficile.

TIA!

Merci à tous ceux qui ont aidé, mais j'ai refaçonné mes modèles, changé ma colonne d'héritage et ça marche maintenant. Je pense que le problème était que j'utilisais: type comme colonne d'héritage, donc quand j'ai demandé de mettre le: type dans le select avant de faire le champ text_field il ne savait pas que j'utilisais un objet Maintenance et qu'il cherchait un objet régulier. Tout objet Ruby normal utilise le champ: type pour autre chose. Donc, il cherchait le type: set à un module, et pas à une chaîne comme j'essayais de le faire. Je peux voir mon nouveau setup qui fonctionne. J'espère que quelqu'un peut apprendre de cela.

+0

* Que * exactement vous obtenez un 'nil' et * où * t-il exactement arrive? –

+0

Comme je l'ai dit là-haut, le: maintenance dans le select est nul. Mais quand j'imprime @maintenance dans le contrôleur, ce n'est pas nul. – dharga

+0

Il peut être utile de voir vos modèles et d'obtenir une liste d'attributs/colonnes pour chacun. – EmFi

Répondre

1

Je vous suggère fortement d'utiliser la méthode form_for pour déclarer vos formulaires.

Dans votre cas, vous pouvez le faire (selon vous):

form_for @maintenance do |f| 
    f.label :name 
    f.text_field :name 
end 

Cela ajoutera les variables de formulaire à votre instance de @maintenance.

Consultez ce guide pour plus d'informations sur les formulaires dans Rails - Dealing with Model Objects in Forms

+0

Je l'utilise déjà, le problème est que je construis deux types différents à la fois ici, il est imbriqué dans un formulaire_for pour un type différent – dharga

+0

La vue entière est ici http://aluink.pastebin.com/m59cb29d1 – dharga

+0

Je viens d'utiliser la construction fields_for, mais cela ne résout pas mon problème, merci;) – dharga