STI,子类和失败的验证

时间:2014-12-18 00:26:54

标签: mysql ruby-on-rails validation single-table-inheritance

我很难确定这里到底发生了什么。

我有一个模型页面,它有两个子类,叫做QeopPage和GymPage。我正在尝试创建一个gympage,但两个类中的验证都与'Validation failed: Title can't be blank, Meta description can't be blank'

一起失败
class GymPage < Page
  self.set_table_name="pages"               

  validates :meta_description, presence:true

end

class Page < ActiveRecord::Base
  validates :title, :presence=>true

end

我认为它可能是一个params问题,但我的服务器日志中没有任何内容表明这一点。我可以在控制台做一个gympage .... 这是相关的服务器日志代码段

Parameters: {"utf8"=>"✓", "authenticity_token"=>"ULWHNAM71V3T+tEgYFaJfWtIQ7twYwktmdo6OSduiYE=", "gym_page"=>{"meta_title"=>"esfwef", "meta_description"=>"wefwefwef", "title"=>"wefwefwef", "body"=>"wefwef", "slug"=>"about", "asset_attachment_title"=>""}, "commit"=>"Update page", "venue_id"=>"venue_one"}
  Admin Load (0.4ms)  SELECT  `admins`.* FROM `admins`  WHERE `admins`.`id` = 633  ORDER BY `admins`.`id` ASC LIMIT 1
  Venue Load (0.5ms)  SELECT  `venues`.* FROM `venues`  WHERE `venues`.`slug` = 'mitre-passage-8754d82e-8eeb-4d9f-91e4-c13b3661991c'  ORDER BY venues.title ASC LIMIT 1
   (0.2ms)  BEGIN
  Admin Load (0.4ms)  SELECT  `admins`.* FROM `admins`   ORDER BY `admins`.`id` ASC LIMIT 1
  Admin Load (0.3ms)  SELECT  `admins`.* FROM `admins`  WHERE `admins`.`id` = 2 LIMIT 1
  Banner Load (0.3ms)  SELECT  `banners`.* FROM `banners`  WHERE `banners`.`id` IS NULL LIMIT 1
  CACHE (0.0ms)  SELECT  `banners`.* FROM `banners`  WHERE `banners`.`id` IS NULL LIMIT 1
   (0.2ms)  ROLLBACK
Completed 422 Unprocessable Entity in 998ms

我应该补充说控制器正在按预期工作 - 参数正确传递。

到底是怎么回事?!

更新

控制器代码

  def create 
    @gym_page = GymPage.new(params[:gym_page_params])
    @gym_page.admin=current_admin
    if @gym_page.save!
      flash[:notice] = 'Page created'
      redirect_to admin_venue_gym_pages_path(@venue)
    else
      flash[:error] = 'There was an error'
      render :new
    end
  end

1 个答案:

答案 0 :(得分:1)

根据请求日志健身房页面属性在gym_page内传递,因此您需要在控制器中执行以下操作

@gym_page = GymPage.new(params[:gym_page])