0

我为一个类生成了脚手架:ExpenseReport 其中一个属性是type- 我为它创建了一个 selct,在可能的情况下有两个选项:MajorRegular.

提交表单以创建报告时,我出现了这个错误:

Invalid single-table inheritance type: Regular is not a subclass of ExpenseReport

我的假设是——“好吧,让我们不要有一个名为 type 的属性,看起来这可能会导致问题。” 所以我创建了一个迁移,将类型重命名为“报告类型”并 rake(请参阅下面的迁移和 rake 证明)

移民

class UpdaeColumnName < ActiveRecord::Migration
  def change
     rename_column :expense_reports, :type, :report_type
  end
end

抽成证明

Drews-MacBook-Pro:depot drewwyatt$ rails generate migration UpdaeColumnName
      invoke  active_record
      create    db/migrate/20130820215925_updae_column_name.rb
Drews-MacBook-Pro:depot drewwyatt$ rake db:migrate
==  UpdaeColumnName: migrating ================================================
-- rename_column(:expense_reports, :type, :report_type)
   -> 0.0021s
==  UpdaeColumnName: migrated (0.0021s) =======================================

但是,现在它永远不会保存我的输入,并且每次提交都会触发验证 - 告诉我“报告类型未包含在列表中”,是否还有其他属性名称需要更新或其他什么?

相关的_form.html.erb

<div class="field">
    <%= f.label :report_type %><br>
    <%= f.select :report_type, ExpenseReport::TYPES,
                        prompt: "select one" %>
  </div>

模型

class ExpenseReport < ActiveRecord::Base
    validates :place_of_purchase, :items, :reason, :estimated_cost, 
              :requestor_name, presence: true
    TYPES =   [ 'Major', 'Regular' ]
    validates :report_type, inclusion: TYPES
    SITES = [ '001 (Lubbock)', '002 (Odessa)', '003 (Midland)', '004 (Lubbock)' ]
    validates :site, inclusion: SITES
end
4

1 回答 1

1

属性“类型”用于单表继承,更多信息可以在这里找到:http ://railscasts.com/episodes/394-sti-and-polymorphic-associations或在这里:http ://rails-bestpractices.com/帖子/45-use-sti-and-polymorphic-model-for-multiple-uploads

如果您继续使用新的 report_type,则应该更改脚手架内容。你在4号线吗?如果是,请在您的费用报告控制器.rb 中更改您的私人费用报告参数方法

应该是这样的:

def expense_report_params
  params.require(:expense_report).permit(:place_of_purchase, :items, :reason, :estimated_cost, :requestor_name, :other_attributes, :type)
end

将其更改为:

def expense_report_params
  params.require(:expense_report).permit(:place_of_purchase, :items, :reason, :estimated_cost, :requestor_name, :other_attributes, :report_type)
end

在 rails 4 中,您始终必须允许您的参数..否则它将无法正常工作。如果你允许一个不存在的参数“类型”,你会得到一个错误..

于 2013-08-20T22:44:37.913 回答