Ruby on rails Rails 4-验证模型不起作用
如果你能帮助我,我将不胜感激。我有一个rails项目,人们可以在那里预订飞机票(不是真正的项目,只是想学习rails:) 我有两个cfaffolded对象-‘seats’和‘flights’,客户可以从每个航班页面购买一个座位(座位作为部分装载) My/app/views/flights/show.html.erb如下所示:Ruby on rails Rails 4-验证模型不起作用,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,如果你能帮助我,我将不胜感激。我有一个rails项目,人们可以在那里预订飞机票(不是真正的项目,只是想学习rails:) 我有两个cfaffolded对象-‘seats’和‘flights’,客户可以从每个航班页面购买一个座位(座位作为部分装载) My/app/views/flights/show.html.erb如下所示: <p> <strong>Departure:</strong> <%= @flight.departure %> &
<p>
<strong>Departure:</strong>
<%= @flight.departure %>
</p>
<p>
<strong>Destination:</strong>
<%= @flight.destination %>
</p>
<p>
<strong>Baggage allowance:</strong>
<%= @flight.baggage_allowance %>
</p>
<%= render partial: "new_seat", locals: {seat: Seat.new(flight_id: @flight.id)} %>
<%= link_to 'Edit', edit_flight_path(@flight) %> |
<%= link_to 'Back', flights_path %>
出发:
目的地:
行李限额:
|
我的新座位部分/app/views/flights/\u new\u seat.html.erb:
<h1>New Seat</h1>
<%= form_for(seat) do |f| %>
<% if seat.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(seat.errors.count, "error") %> prohibited this seat from being saved:</h2>
<ul>
<% seat.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<%= f.hidden_field :flight_id %>
<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :baggage %><br>
<%= f.text_field :baggage %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
新座位
禁止保存此座椅:
如果这很重要-我通过从/app/views/seats/new.html.erb复制它,使new_seat成为我自己的一部分
现在我需要验证行李数量,以防止我的客户抓到大行李。我是这样写我的/app/models/seat.rb的:
class Seat < ActiveRecord::Base
belongs_to :flight
def validate
if baggage > flight.baggage_allowance
seat.errors.add(:base, message: "You have too much baggage")
end
end
end
class-Seat航班,行李限额
座位。错误。添加(:base,消息:“您的行李太多”)
结束
结束
结束
但它不起作用——当客户在行李区输入大量行李时,现场并没有错误。我做错了什么?
validate
方法已经可用(ActiveRecord为我们提供了一个类方法来实现自定义验证)。您可以使用AR提供的方法。类似下面的代码
validate :check_baggage_limit
def check_baggage_limit
if baggage > self.flight.baggage_allowance
self.errors.add(:base, "You have too much baggage")
end
end
validate
方法已经可用(ActiveRecord为我们提供了一个类方法来实现自定义验证)。您可以使用AR提供的方法。类似下面的代码
validate :check_baggage_limit
def check_baggage_limit
if baggage > self.flight.baggage_allowance
self.errors.add(:base, "You have too much baggage")
end
end
您可以通过两种方式添加自定义验证。 首先是自定义方法如下所示
class Seat < ActiveRecord::Base
belongs_to :flight
validate :baggage_limit
def baggage_limit
if baggage > flight.baggage_allowance
errors.add(:base, message: "You have too much baggage")
end
end
end
class-Seat航班,行李限额
错误。添加(:base,消息:“您的行李太多”)
结束
结束
结束
第二个是自定义验证程序
class BaggageValidator < ActiveModel::Validator
def validate(seat)
if seat.baggage > seat.flight.baggage_allowance
seat.errors.add(:base, message: "You have too much baggage")
end
end
end
class Seat < ActiveRecord::Base
include ActiveModel::Validations
belongs_to :flight
validates_with BaggageValidator
end
class BaggageValidatorseat.flight.baggage\u余量
座位。错误。添加(:base,消息:“您的行李太多”)
结束
结束
结束
class Seat
您一定误读了您可以通过两种方式添加自定义验证。 首先是自定义方法如下所示
class Seat < ActiveRecord::Base
belongs_to :flight
validate :baggage_limit
def baggage_limit
if baggage > flight.baggage_allowance
errors.add(:base, message: "You have too much baggage")
end
end
end
class-Seat航班,行李限额
错误。添加(:base,消息:“您的行李太多”)
结束
结束
结束
第二个是自定义验证程序
class BaggageValidator < ActiveModel::Validator
def validate(seat)
if seat.baggage > seat.flight.baggage_allowance
seat.errors.add(:base, message: "You have too much baggage")
end
end
end
class Seat < ActiveRecord::Base
include ActiveModel::Validations
belongs_to :flight
validates_with BaggageValidator
end
class BaggageValidatorseat.flight.baggage\u余量
座位。错误。添加(:base,消息:“您的行李太多”)
结束
结束
结束
class Seat
你一定误读了谢谢,我只是在学习,周围有这么多信息:)谢谢,我只是在学习,周围有这么多信息:)