如果表单包含错误,如何从另一个控制器重新填充该表单

时间:2014-02-18 10:55:02

标签: ruby-on-rails

我正在研究rails guide的入门,并在评论中添加错误验证,但如果我有错误,则不会重新填充表单。

我发布了/car/show.html.erb

的日期

我使用flash检查错误(正常工作)但如果错误,我的表单将变空。

我的comments_controller.rb控制器的代码:

def create
 @car = Car.find(params[:car_id])
  if @comment = @car.comments.create(params[:comment].permit(:email,:sujet,:commentaire))
    flash[:error] = @comment.errors
    flash.keep[:error]
    render 'car/show'
  else
    redirect_to car_path(@car)
 end
end

在cars / show.html.erb下面

<h1>Fiche détaillée</h1>

<%= @car.marque %><br>
<%= @car.modele %><br>
<%= @car.nbkm %><br>
<%= @car.couleur %><br>
<%= @car.disponibilite %><br>
<hr>
<h1><%= pluralize(@car.comments.count,'Commentaire') %></h1>
<% @car.comments.each do |k| %>
<%= k.email %><br>
<%= k.sujet %><br>
<%= k.commentaire %><br>
<hr>
<% end %>
<hr>
<h1>Ajouter votre commentaire</h1>
<div style='width:300px;'>

<% flash.each do |key, msg| %>
<p class="bg-danger" style='padding:10px;'><%= pluralize(msg.count,'error') %></p>
  <ul><% msg.full_messages.each do |m|%>
        <li><%= m %></li>
    <% end %>
<% end %>
</ul>


<%= form_for ([@car,@car.comments.build]) do |co| %>

      <%= co.label :'Email' %><br>
      <%= co.text_field :email , class: 'form-control' %><br>
  <br>

      <%= co.label :'Sujet' %><br>
  <%= co.text_field :sujet , class: 'form-control'%><br>
  <br>

      <%= co.label :'Commentaire' %><br>
  <%= co.text_area :commentaire , class: 'form-control' %><br>
  <br>

      <%= co.submit :'Envoyer votre commentaire', class: 'btn btn-info'%>

<% end %>

当控制器不相同时,我不知道如何处理渲染。

1 个答案:

答案 0 :(得分:0)

试试这个, 修改

def create
 @comment = Comment.new(params[:comment].permit(:email,:sujet,:commentaire))
  if !@comments.save
    flash[:error] = @comment.errors
    flash.keep[:error]
    render 'car/show'
  else
    redirect_to car_path(@car)
end
end

汽车/表演方法:

def show
@car = Car.find(params[:id])
@comment = @car.comments.build
end

更改

<%= form_for ([@car,@car.comments.build]) do |co| %>

<%= form_for @comment do |co| %>