ruby-on-rails Ruby on Rails嵌套表单记住提交的数据和错误消息

um6iljoc  于 2023-05-02  发布在  Ruby
关注(0)|答案(1)|浏览(219)

我有一个问题,似乎它应该在这个表单上使用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 %>

非常感谢你提前花时间来看看这个!
目前,我只是重定向回文章路径(这是什么丢失的形式数据/错误,我相信)。我希望表单能够记住在提交无效时提交的表单数据,以及显示错误的能力。

ttcibm8c

ttcibm8c1#

这里的Rails解决方案是,如果出现错误,您应该重新呈现new视图,而不是重定向。
您的操作应该如下所示:

def create
  @article = Article.find(params[:article_id])
  @comment = @article.comments.build(comment_params)

  if @comment.save
    redirect_to article_path(@article)
  else
    render 'new' # no: redirect_to article_path(@article)
  end
end

这就是全部。new视图的编写方式应该是使用模型中填充的值来呈现表单,如果使用form_with model: @article,可以免费获得表单。您可能需要用错误消息装饰表单,您可以选择在表单上方显示某种“顶级”错误消息,例如:

<% if @article.errors.any? %>
  <p class="error">Your submission contained one or more errors</p>
<% end %>

相关问题