2016-04-02 11 views
-1

Ich habe ein Modell namens studies.(Rails) Wie ID aus Bearbeitungs-URL erhalten

Nach Aktion Umleitung redirect_to edit_study_path(@new_study),

URL: http://localhost:3000/studies/2/edit.

Gibt es sowieso eine URL nach Passieren id anpassen?

Zum Beispiel http://localhost:3000/study (immer noch in den Bearbeitungspfad, und nach wie vor mit den :id in dem params)

+0

Ich glaube nicht, ohne irgendwelche Params. – 7urkm3n

+0

Kann ich Feedback zu den negativen Stimmen bekommen? Wie könnte ich meine Frage verbessern? – Mirror318

Antwort

2

Ich denke, was Sie wollen, ist die aktuelle Studie zu bearbeiten? In diesem Fall ist es möglich, ressource anstelle von ressources in den Routen zu verwenden.

Nehmen wir ein Beispiel haben: (. ZB bearbeiten in Ihrem Fall)

#in routes.rb 
    resources :studies 
    resource :study 

Beide werden durch Standard-Link zu den StudiesController und rufen die gleichen Aktionen, aber in zwei verschiedenen Routen

get "/studies/:id/edit" => "studies#edit" 
    get "/study/edit" => "studies#edit" 

in Ihrer Bearbeitungsaktion, sollten Sie dann Setup die Parameter korrekt zu handhaben:

def edit 
    @study = params[:id].nil? ? current_study : Study.find(params[:id]) 
    end 

Beachten Sie, dass Sie eine current_study-Methode benötigen und speichern Sie die aktuelle_Studie in Cookies/Sitzungen, damit sie funktioniert.

Beispiel:

# In application_controller.rb 
def current_study 
    @current_study ||= Study.find_by(id: session[:current_study_id]) #using find_by doesn't raise exception if doesn't exists 
end 

def current_study= x 
    @current_study = x 
    session[:current_study_id] = x.id 
end 

#... And back to study controller 
def create 
    #... 
    #Eg. setup current_study and go to edit after creation 
    if study.save 
     self.current_study = study 
     redirect_to study_edit_path #easy peesy 
    end 
end 

Glücklich Codierung,

Yacine.

+0

Warum suchen Sie immer noch nach Params? Was würde die ID in Params setzen? – Mirror318

+1

Dies ist der Fall, wenn Sie zwei Routen zur Bearbeitungsaktion haben möchten: '/ studies /: id/edit' und'/study/edit'. Wenn du nur die Route ohne Params hast, ignoriere den Check und gehe direkt zu "current_study" ;-) – Yacine