我有一个问题,似乎它应该在这个表单上使用rails魔法。我有一个articles控制器,它有一个嵌套的资源注解。我在文章#show页面上有评论表格。当我提交带有无效数据的表单时,我希望能够访问错误对象来标记错误,并且我还希望在表单提交无效的情况下记住用户在表单上输入的内容。目前,我只是重定向回文章路径(这是什么丢失的形式数据/错误,我相信)。
表单当前提交,如果提交的是有效的评论,则会记住数据。只是没有错误/记住字段值。
routes.rb
Rails.application.routes.draw do
root "articles#index"
resources :articles do
resources :comments
end
end
文章#show
def show
@article = Article.find(params[:id])
@comment = Comment.new
end
comments#create
def create
@article = Article.find(params[:article_id])
@comment = @article.comments.build(comment_params)
if @comment.save
redirect_to article_path(@article)
else
# Thinking this should be a render method
redirect_to article_path(@article)
end
end
意见表:
<%= form_with model: [ @article, @comment ], html: { class: "comment-form" } do |form| %>
<div class="form-set">
<%= form.label :commenter %><br>
<%= form.text_field :commenter, class: "commenter" %>
</div>
<div class="form-set">
<%= form.label :body %><br>
<%= form.text_area :body %>
</div>
<div>
<%= form.submit class: "btn btn-large btn-success" %>
</div>
<% end %>
非常感谢你提前花时间来看看这个!
目前,我只是重定向回文章路径(这是什么丢失的形式数据/错误,我相信)。我希望表单能够记住在提交无效时提交的表单数据,以及显示错误的能力。
1条答案
按热度按时间ttcibm8c1#
这里的Rails解决方案是,如果出现错误,您应该重新呈现
new
视图,而不是重定向。您的操作应该如下所示:
这就是全部。
new
视图的编写方式应该是使用模型中填充的值来呈现表单,如果使用form_with model: @article
,可以免费获得表单。您可能需要用错误消息装饰表单,您可以选择在表单上方显示某种“顶级”错误消息,例如: