Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4-验证模型不起作用_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails Rails 4-验证模型不起作用

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 %> &

如果你能帮助我,我将不胜感激。我有一个rails项目,人们可以在那里预订飞机票(不是真正的项目,只是想学习rails:)

我有两个cfaffolded对象-‘seats’和‘flights’,客户可以从每个航班页面购买一个座位(座位作为部分装载)

My/app/views/flights/show.html.erb如下所示:

<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

你一定误读了

谢谢,我只是在学习,周围有这么多信息:)谢谢,我只是在学习,周围有这么多信息:)