Mam formularz umożliwiający użytkownikowi utworzenie pytania (w dodatku do modelu użytkownika, na stronie profilu znajduje się model zapytania z zagnieżdżonymi odpowiedziami). Przesyła on ze strony profilu użytkownika /views/users/show.html.erb do akcji create question_controller.rb. Jeśli to nie zostanie zatwierdzone, domyślnie dla Railsów jest renderowanie formularza (z nieprawidłowymi informacjami w formularzu do edycji przez użytkownika). Ponieważ jednak przesyłam formularz modelu pytania ze strony profilu użytkownika, wstępne wypełnienie nie następuje po nieudanej walidacji; użytkownik jest zmuszony ponownie wprowadzić wszystkie informacje w formularzu. Czy w tym kontekście istnieje sposób uzyskania formularza na stronie pokazu użytkowników w celu wypełnienia informacji wprowadzonych przed przesłaniem?Ponowne wypełnianie formularza po nieudanej walidacji
questions_controller
def create
@question = current_user.questions.build(params[:kestion])
if @question.save
redirect_to current_user, :notice => "Successfully created question."
else
###render :action => 'show'
redirect_to current_user
end
end
Aktualizacja Zmieniłem końcówkę metody tworzenia zbyt
Redirect (: back), :notice => "something went wrong.try again"
Ale nadal nie mogę dostać formularz do wypełnienia, a także komunikaty o błędach walidacji aren wyświetla się tylko informacja flash.
Aktualizacja Sposób pokaz kontrolera użytkowników tworzy nowe pytanie (wraz z obsługą)
def show
@user = User.find(params[:id])
@question = Question.new
3.times {@question.answers.build}
end
/views/users/show.html.erb
<%= form_for @question do |f| %>
<% if @question.errors.any? %>
<h2><%= pluralize(@question.errors.count, "error") %> prohibited this question
from being saved: </h2>
<ul>
<% @question.errors.full_messages.each do |msg| %>
<li> <%= msg %></li>
<% end %>
</ul>
<% end %>
<p>
<%= f.label :content, "Question"%>
<%= f.text_area :content, :class => 'span4', :rows => 1 %>
</p>
<p>
<%= f.label :link, "QuoraLink" %>
<%= f.text_field :link, :class => 'span4', :rows => 1 %>
</p>
<%= f.fields_for :answers do |builder| %>
<p>
<%= render 'answer_fields', :f => builder %>
</p>
<% end %>
<p><%= link_to_add_fields "Add Answer", f, :answers %></p>
<p><%= f.submit %></p>
<% end %>
się answer_fields Częściowo renderowane na pytania częściowe:
<p class="fields">
<%= f.label :content, "Answer..." %>
<%= f.text_field :content, :class => 'span3', :rows => 1%>
<%= f.label :correctanswer, "Correct" %>
<%= f.check_box :correctanswer, :class => 'span1' %>
<%= link_to_remove_fields "remove answer", f %>
</p>
Jak wygląda metoda "pokaż" w swoim kontrolerze UsersController? To jest metoda, która wstępnie wypełnia formularz, jak rozumiem. Jak wygląda widok views/users/show.html. {Erb, haml}? Możesz przekazać tam parametry poprzez parametry ścieżki lub przez sesję [], ale prawdopodobnie będziesz potrzebował tam pewnych zmian. – moonfly
@moonfly metoda show z kontrolera Użytkownicy "powinien" wstępnie wypełnij formularz (tj. To jest to, czego chcę), jeśli nie działa valiate, ale obecnie nie robi tego. Zaktualizowałem OP przy pomocy kodu, który zasugerowałeś. Czy możesz mi powiedzieć, w jaki sposób mogę zmienić powyższy kod, aby wstępnie wypełnić formularz, jeśli nie można go zweryfikować za pomocą żadnej z dwóch metod, do których się odnosisz? – Leahcim