[英]Nested form validation in Rails
我有以下代碼:
<%= form_with(model: [@lawsuit, @lawsuit.suits.build]) do |f| %>
<fieldset>
<legend>New Suit</legend>
</fieldset>
<br />
<div class="form-group">
<%= f.label :claim %>
<%= f.text_field :claim, class: 'form-control', placeholder: 'Name' %>
</div>
<div class="form-group">
<%= f.label :sentence %>
<%= f.text_area :sentence, class: 'form-control', placeholder: 'Sentence' %>
</div>
<div class="form-group">
<%= f.label :result %>
<%= f.select(:result, [['Not Favorable', false], ['Favorable', true]], {}, {class: 'form-control'}) %>
</div>
<%= button_tag type: 'submit', class: "btn btn-primary float-right" do %>
<i class="fa fa-plus" aria-hidden="true"></i>
Create
<% end %>
<% end %>
如何顯示訴訟的錯誤列表(這是@lawsuit的嵌套屬性)並在屏幕上顯示錯誤? 我已經在模型上進行了驗證。 該模型是這樣的:
class Suit < ApplicationRecord
belongs_to :lawsuit
validates_presence_of :claim, :sentence
end
我的控制器如下。
該過程開始於訴訟控制人。 在那里,我建立了@suit(在表單中使用)。
套裝控制器:
class SuitsController < ApplicationController
before_action :set_suit, only: [:show]
def new
end
def create
Rails.logger.info "=====================SUIT CREATION"
@lawsuit = Lawsuit.find(params[:lawsuit_id])
@suit = @lawsuit.suits.build(suit_params)
Rails.logger.info "AISHA #{@suit.errors.any?}"
# @suit = @lawsuit.suits.new(suit_params)
if @suit.save
flash[:notice] = "Suit created successfully"
redirect_to lawsuit_path(@lawsuit)
else
Rails.logger.info "AISHA #{@suit.valid?}"
flash[:alert] = "Something went wrong"
redirect_to lawsuit_path(@lawsuit)
end
end
訴訟總監
class LawsuitsController < ApplicationController
before_action :set_lawsuit, only: [:show]
def index
@lawsuits = Lawsuit.paginate(:page => params[:page], :per_page => 8)
end
def show
begin
@blob = Lawsuit.get_blob_for_document(@lawsuit.document_number)[1]
rescue
@blob = "Cannot load document!"
flash[:error] = "Cannot load document!"
end
@lawsuit = Lawsuit.find(params[:id])
@suit = @lawsuit.suits.build
end
private
def set_lawsuit
@lawsuit = Lawsuit.find(params[:id])
end
def lawsuit_params
params.require(:lawsuit).permit(:document_number, :region, :court, :noted)
end
end
修改視圖如下
<%= form_with(model: [:lawsuit, @suit]) do |f| %>
<fieldset>
<legend>New Suit</legend>
</fieldset>
<br />
<% if @suit.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@suit.errors.count, "error") %>
<%= "prohibited this suit from being saved:" %>
</h2>
<ul></ul>
<% @suit.errors.full_messages.each do |message| %>
<li>
<%= message %>
</li>
<% end %>
</div>
<% end %>
<div class="form-group">
<%= f.label :claim %>
<%= f.text_field :claim, class: 'form-control', placeholder: 'Name' %>
</div>
<div class="form-group">
<%= f.label :sentence %>
<%= f.text_area :sentence, class: 'form-control', placeholder: 'Sentence' %>
</div>
<div class="form-group">
<%= f.label :result %>
<%= f.select(:result, [['Not Favorable', false], ['Favorable', true]], {}, {class: 'form-control'}) %>
</div>
<%= button_tag type: 'submit', class: "btn btn-primary float-right" do %>
<i class="fa fa-plus" aria-hidden="true"></i>
Create
<% end %>
<% end %>
注意,您應該@suit
從控制器操作中構建@suit
對象
@suit = @lawsuit.suits.build
你的控制器應該是
class SuitsController < ApplicationController
before_action :set_suit, only: [:show]
def new
end
def create
@lawsuit = Lawsuit.find(params[:lawsuit_id])
@suit = @lawsuit.suits.build(suit_params)
if @suit.save
flash[:notice] = "Suit created successfully"
redirect_to lawsuit_path(@lawsuit)
else
render :form
end
end
要么
如果要顯示Flash消息,則應在視圖上編寫以下代碼
<% flash.each do |key, value| %>
<div class="alert alert-<%= key %>"><%= value %></div>
<% end %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.