我有一个页面,其中部分包含我的rails app(5.1.1)中的表单
我使用的是simple_form gem。
此页面用于显示旅程的详细信息,其中包含许多腿。在旅程视图中,我们为腿部视图渲染部分"_form"
。此视图包含一个表单,用于创建要添加到旅程中的新分支,在这种情况下,将从'show'
旅程视图中呈现。
<div class="container">
<div class="col-xs-12">
<h3><%= @journey.name %></h3>
<h4><%= @journey.legs.count %> <%= "leg".pluralize(@journey.legs.count) %> covering <%= @journey.total_distance.round(1) %> <%="mile".pluralize(@journey.total_distance)%>!</h4>
<hr/>
<h4><%= (@journey.has_legs) ? 'Add another leg to the journey' : "Your journey has no legs, and we all know a journey can't go far without its legs! Quick...give it some legs..." %></h4>
<%= render partial: "legs/form", locals: {leg: @new_legs.first} %>
<%= link_to 'Edit', edit_journey_path(@journey) %> |
<%= link_to 'Back', journeys_path %>
</div>
当正在创建的腿上发生验证错误时,由于腿的创建动作代码 - 它呈现腿的新视图,该视图在新视图上工作并显示所有错误等腿。这是由于腿控制器上的以下动作代码:
def create
@leg = Leg.new(leg_params)
respond_to do |format|
if @leg.save
format.html { redirect_to @leg, notice: 'leg was successfully created.' }
format.json { render :show, status: :created, location: @leg }
else
format.html { render :new }
format.json { render json: @leg.errors, status: :unprocessable_entity }
end
end
end
然而,我想呈现这段旅程&#34; show&#34;查看显示所有错误的视图,如:腿的新视图。
我知道您可以执行render "journeys/show"
呈现旅程的展示视图,但是,它不会在呈现的部分"legs/form"
中保留验证错误。
如何渲染旅程显示视图,确保将所有验证错误传递给包含的部分?我尝试过使用redirect_back(fallback_path=>root_url)
,但这并不会导致错误。
请帮忙!
答案 0 :(得分:0)
答案相对简单 - 多亏了freenode #rubyonrails的帮助渠道。
传递一个控制器创建的@leg实例的部分,这个@leg对象将是一个新对象,或者它将是包含所有错误的旧对象。
在旅程秀控制器中创建@leg,在leg创建操作中,如果失败,从@ leg.journey创建一个@journey实例变量然后渲染“journeys / show”等等,一切都按预期工作
答案 1 :(得分:-2)
更新:这不是最好的建议,但可以让你找到正确的方向。我认为这听起来像How to display Ruby on Rails form validation error messages one at a time 在这里它还描述了http://guides.rubyonrails.org/v2.3.11/activerecord_validations_callbacks.html#errorsadd 在我的情况下,我使用此功能没有数据库验证: 控制器:
def create
...
flash.now[:danger] = 'Invalid data'
render 'index'
end
查看index.html.erb
<% flash.each do |message_type, message| %>
<div class="alert alert-<%= message_type %>"><%= message %></div>
<% end %>