2012-04-13 8 views
1

Ich habe eine has_one/gehört zu einer Verknüpfung zwischen zwei Modellen -> User und ContactCard. Während ich in der Lage bin, eine Kontaktkarte für einen Benutzer zu erstellen, wird die Erstellungsaktion von ContactCardsController aufgerufen, anstatt sie zu aktualisieren, wenn ich versuche, die Karte zu bearbeiten (das kann ich sagen, weil ich unterschiedliche Erfolgsmeldungen habe). Es ändert sich die Attribute der Kontaktkarte, gut, ich muss sagen. Ich bin meistens froh, dass es funktioniert, aber ich würde eher Lücken in meinem Verständnis von Schienenpfaden und -verknüpfungen schließen. Was vermisse ich? Warum benutzt es nicht die Aktion, die ich erwarte? Auch wenn Sie irgendwelche relevanten Beispiele im Internet oder auf Github kennen, die ich studieren könnte, bin ich ganz Ohr. Vielen Dank!Bearbeiten has_one Objekte mit form_for in Rails

Kontakt-Karten-Controller ...

class ContactCardsController < ApplicationController  


def create 
    current_user.build_contact_card(params[:contact_card]) 
    if current_user.contact_card.save 
    flash[:success] = "Contact Card created!" 
    redirect_to '/account' 
    else 
    flash[:error] = "Fail!" 
    redirect_to '/account' 
    end 
end 

    def update 
    if current_user.contact_card.update_attributes(params[:contact_card]) 
     flash[:success] = "Profile updated." 
     redirect_to '/account' 
    else 
     flash[:error] = "Fail!" 
     redirect_to '/account' 
    end 
    end 

Link-Formular zu bearbeiten ...

<%= link_to "Edit Profile", edit_user_contact_card_path(current_user) %> 

Formular bearbeiten ...

<%= form_for [current_user, current_user.build_contact_card], :url => user_contact_card_path(current_user) do |f| %> 

<%= f.label :first_name %> 
<%= f.text_field :first_name %>  

<%= f.label :last_name %> 
<%= f.text_field :last_name %> 

<%= f.submit "Save Contact Details", :class => "btn btn-large btn-primary" %> 

<% end %>               

Relevante Routen ...

resources :users do  
    resource :contact_card  
    ..... 

Das User-Modell has_one: contact_card und der ContactCard Modell belongs_to: Benutzer

+0

try edit_user_contact_card_path (current_user.id), nicht sicher, weil ich nicht weiß, welche Authentifizierungsschema Sie verwenden. Schauen Sie sich auch die ContactCard-Tabelle an. Ich wette, Sie haben einen Datensatz für jede Karte, die Sie bearbeitet haben. – RadBrad

+0

Ich habe das versucht und es geht immer noch aus irgendeinem Grund durch den Erstellungs-Pfad. current_user gibt das Benutzerobjekt für den aktuellen Benutzer zurück. –

Antwort

4
<%= form_for [current_user, current_user.build_contact_card], :url => user_contact_card_path(current_user) do |f| %> 

Dies baut eine neue Kontaktkarte jedes Mal bearbeiten! Ändern Sie ihn auf

<%= form_for [current_user,contact_card], :url => user_contact_card_path(current_user) do |f| %> 

Sie würden wollen, dass die build_contact_card im erstellen Aktion von Benutzer Controller wahrscheinlich

+0

Danke! Ich kann nicht glauben, dass ich das vermisst habe. –