Tôi có một biểu mẫu để người dùng tạo câu hỏi (trong phần bổ sung cho mô hình người dùng, có mô hình câu hỏi, với câu trả lời lồng nhau) trên trang hồ sơ của họ. Nó gửi từ trang hồ sơ người dùng /views/users/show.html.erb đến hành động tạo của questions_controller.rb. Nếu nó không hợp lệ, tôi nghĩ rằng mặc định cho Rails là biểu hiện biểu mẫu (với thông tin không hợp lệ trong biểu mẫu để người dùng chỉnh sửa). Tuy nhiên, vì tôi đang gửi biểu mẫu cho mô hình câu hỏi từ trang hồ sơ người dùng nên việc lập trước không xảy ra khi xác thực không thành công; người dùng buộc phải nhập lại tất cả thông tin trong biểu mẫu. Có cách nào trong ngữ cảnh này để lấy biểu mẫu trên trang hiển thị của người dùng để điền thông tin đã được nhập trước khi gửi không?Mẫu điền lại khi xác thực không thành công
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
Cập nhật Tôi đã thay đổi khi kết thúc tạo phương pháp quá
Redirect (: back), :notice => "something went wrong.try again"
Nhưng tôi vẫn không thể lấy mẫu đơn để cư trú, và các thông báo lỗi xác nhận aren không hiển thị một trong hai, chỉ thông báo flash.
Cập nhật Phương pháp hiển thị của bộ điều khiển người dùng tạo ra câu hỏi mới (cùng với người sử dụng)
def show
@user = User.find(params[:id])
@question = Question.new
3.times {@question.answers.build}
end
Các /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 %>
các answer_fields được trả lại một phần từ các câu hỏi một phần
<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>
phương thức 'hiển thị' trông như thế nào trong UsersController của bạn? Đây là phương thức mà trước khi điền vào biểu mẫu, như tôi đã hiểu. Ngoài ra, chế độ xem/người dùng/show.html. {Erb, haml} trông như thế nào? Bạn có thể chuyển các tham số ở đó thông qua các tham số đường dẫn hoặc thông qua phiên [], nhưng bạn có thể sẽ cần một số thay đổi ở đó. – moonfly
@moonfly phương thức hiển thị từ trình điều khiển Người dùng 'nên' điền sẵn biểu mẫu (tức là đó là những gì tôi muốn) nếu nó không hiệu quả, nhưng hiện tại nó không thực hiện điều đó. Tôi đã cập nhật OP với mã mà bạn đề nghị tôi hiển thị. Bạn có thể cho tôi biết làm thế nào tôi có thể thay đổi mã trên để prepopulate các hình thức nếu nó không xác nhận với một trong hai phương pháp bạn đề cập đến? – Leahcim