2011-12-20 2 views
1

J'obtiens cette erreur:Association Incohérence de type

ActiveRecord::AssociationTypeMismatch (Design(#2199041060) expected, got String(#2151988680))

Je suis en train de créer un événement dans lequel l'utilisateur entre des informations pour l'événement et en même temps sélectionne un dessin. Chaque fois que je clique sur le bouton Créer, l'erreur se produit.

Voici mes modèles:

class Design < ActiveRecord::Base 
    belongs_to :event  # User creates an Event and selects only one Design 
    belongs_to :user   # User could also create a Design 
end 

class Event < ActiveRecord::Base 
    belongs_to :user  # A user can create as many events 
    has_one  :design # User can only select one design for this event 
end 

Voici mon contrôleur de l'événement

def create 
    @event = Event.new(params[:event]) 
    @user = current_user 
    @designs = Design.all 

    if @event.save 
    flash[:success] = "Event created" 
    @user.events << @event 
    redirect_to events_path 
    end 
end 

Voici mon point de vue de l'événement:

<%= form_for @event, :url => {:action => 'create', :id => @event.id } do |e| %> 
<p>Enter a title for this event: <%= e.text_field :title %> </p> 

<p>Select a design:</p> 
<ul class = "list"> 
    <% @designs.each do |design| %> 
     <li><%= e.radio_button :design, design.id %> <%= design.name %></li> 
    <% end %> 
</ul> 
    <%= e.submit "Create" %> 
<% end %> 
+1

Sans l'erreur complète Je ne suis une scarification ici, mais il ressemble à un certain moment la base de données vous attendait de passer un objet design et la place a une chaîne – ScottJShea

Répondre

1
<%= e.radio_button :design, design.id %> 

vous passez pas vraiment un objet de conception tout à votre modèle d'événement - juste l'identifiant, donc cela devrait refléter réellement qu'en utilisant à la place:

<%= e.radio_button :design_id, design.id %> 

Edit: et ajouter à votre modèle d'événement:

def design_id=(the_id) 
    return unless the_id 
    the_design = Design.find_by_id(the_id) 
    self.design = the_design if the_design 
end 
+0

Nope cela n'a pas fonctionné, j'ai eu cette erreur non définie méthode 'design_id 'pour # ' Je suis supposé transmettre l'ID d'événement au modèle de conception, non? Depuis un événement peut avoir un seul design. – Moose

+0

Ah, parce que c'est has-one. Ok, vous devrez ajouter la méthode que je vais ajouter à la réponse ci-dessus. –

2

À votre avis, le changement: la conception à: design_id.