Zmiana elementów DOM na stronie po przekierowaniu

mam kontroler Questions w którym jest dodawanie nowego pytania i przekierowanie do konkrolera Pages gdzie są strony z pytaniami. Czy da sie jakoś w sprytny sposób wyświetlić formularz edycji tego pytania ajaxem na docelowej stronie zaraz po przekierowaniu ? Tak jakby kliknięty był link edytuj, który wygląda tak

<%= link_to_remote image_tag("/images/ico_edit.gif"), :url => edit_question_path(question.group_id, question), :method => :get, :update => "question_edit_#{question.id}" %>

Chyba nie rozumiem problemu… Podpinasz funkcję javascriptową do wywołania w momencie załadowania DOM. W zależności od używanego frameworka JS używasz (Prototype) document.observe (http://www.prototypejs.org/api/document/observe) lub (jQuery) $(document).ready (http://docs.jquery.com/Events/ready#fn).

Bardzo zły pomysł: AJAX request natychmiast po załadowaniu strony. Prościej i skuteczniej: wyrenderuj formularz edycji od razu, przy renderowaniu listy pytań.

Like, github?

Tak. Issues w github to jedno z najgorszych wykonań jakie widziałem :frowning:

To by było najlepsze, tylko jak elegancko przekazać id pytania do którego ma być wyrenderowany formularz edycji. Bo jak wspomniałem pytanie jest zapisywane w kontrolerze Questions i stamtąd jest przekierowanie do listy pytań na stronie z kontrolera Pages. Można w sesji to przekazać, albo w urlu jako dodatkowy parametr ?question_edit=123, które lepsze ?

Issues to zabawka do niewielkich projektów i owszem, jest średnia. Natomiast szybkość ładowania stron na githubie od kiedy dane do wyjęcia z repo / commitu są dociągane AJAXem jest wręcz wzorowa :slight_smile:

Rule of thumb 1: jeśli można * coś przekazać w URLu / pozostać w GET – należy to zrobić.
Rule of thumb 2: jeśli można * uniknąć trzymania czegoś w sesji – należy unikać.
:wink:

  • – łatwo i nie na siłę

Dzięki, zrobiłem URLem. Jest jeden problem, w sumie natury kosmetycznej :slight_smile:
Forumularz edycji pytania wywołuję z listy linkiem ajaxowym

<%= link_to_remote image_tag("/images/ico_edit.gif"), :url => edit_question_path(question.group_id, question), :method => :get, :update => "question_edit_#{question.id}" %>
Forumularz edycji którypokazuje się przy dodaniu nowego pytania, po przekierowaniu, jest jako render na liście, tak jak wyszło z powyższych rad. Czyli kiedy jedziemy po pytaniach sprawdzam czy w URLu było przekazane question

<%= render :partial => "questions/edit", :locals => {:question => question} if question.id == params[:question].to_i %>

Początek formularza edycji pytania wygląda tak

<% form_for(:question, question, :url => {:action => :show}, :html => {:method => :put}) do |f| %>

Niestety dla ajaxa pytanie jest przekazywane jako zmienna @question, natomiast dla render jako zmienna lokalna question, więc w widoku musiałem dać przed forumularzem coś takiego

<% question ||= @question %>

Da się coś z tym zrobić żeby zarówno dla edycji wywołanej ajaxem jak i renderem używać jednego typu zmiennej ?