如何使用rails创建数据库记录? - ActiveRecord :: UnknownAttributeError

时间:2015-01-02 05:40:46

标签: ruby-on-rails ruby activerecord

我在数据库中创建新日志时遇到问题。我最近从一个过时版本的rails升级到最新版本,所以我不太确定发生了什么变化。升级后我一直在修复很多错误,但我对这个问题感到难过。它抱怨没有工厂的名称属性,但是当我打开我的架构时,它似乎在那里,所以我不知道从哪里开始。

查看

= form_tag factories_path, :multipart => true  do
    = label :factory, :name, 'Name'
    = text_field :factory, :name
    %br
    = label :factory, :poolMin, "Pool Min"
    = text_field :factory, :poolMin
    %br
    = label :factory, :poolMax, "Pool Max"
    = text_field :factory, :poolMax
    %br
    = submit_tag 'Create Factories'

控制器

def create
  @factory = Factory.new(user_params)
  @factory.save
  redirect_to factories_path
end
def user_params
  params.require(:factory).permit(:name, :poolMin, :poolMax)
end

Schema.rb

create_table "factories", :force => true do |t|
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "name"
    t.integer  "poolMin"
    t.integer  "poolMax"
end

错误:

Factory的未知属性'name'。 提取的来源(第10行):

def create
  @factory = Factory.new(user_params)
  @factory.save
  redirect_to factories_path
end

请求

参数:

{"utf8"=>"✓", "authenticity_token"=>"7MXAkLikF6Mm+rXd3YrI8W25i9/Q85Peqv2AWeDRKl3+aZZtWtgiKuh0SSghhMoTHvGYn    pnfldduKqd08SkAdw==",
 "factory"=>{"name"=>"f",
 "poolMin"=>"33",
 "poolMax"=>"44"},
 "commit"=>"Create Factories"}

2 个答案:

答案 0 :(得分:2)

我们不能完全说出确切的问题,但我可以告诉你我将采取的调试过程。

1)打开Rails控制台并确保可以Factory.new(名称:“blah”,poolMin:0,poolMax:10)。您可能正在处理比您想象的更低级别的问题。该问题可能与user_params(应该是factory_params,btw)或您的控制器无关。

2)一旦你确定了这一点,尝试每个属性,一次一个,看看它是否只是其中一个给出了错误。如果您仅使用:name发出请求,您是否仍会收到未知属性错误?如果你尝试:poolmin单独,(应该是pool_min的风格“The Rails Way”)它有效吗?此时你可以知道它是什么,并深入研究你的数据库,看看是否有一个小的错字或那些不容易引起注意的事情。

4)使用Gem Better错误,您可以在控制器中调用“fail”,然后进入Better Errors控制台并运行命令,就好像您在控制器中的确切时刻处于命令行一样。玩弄它,看它是否有效。

5)尝试重新编写代码,看看在重写代码时是否遇到了同样的错误。

6)此时出于可能的绝望,如果上述所有内容都不起作用,您可以尝试使用Active Record在数据库中创建记录的其他方法。 Factory.create(名称:“blah”,poolMin:0,poolMax:10),它将创建模型并将其保存在一个命令中。如果你这样做的话! (即Factory.create!(...))它会给你一个正确的错误信息。你可以使用save!等等。无论如何,你不应该达到这一点!

希望这有帮助!

答案 1 :(得分:1)

ActiveRecord::UnknownAttributeError清楚地表明您的数据库中没有映射列(在您的情况下为name)。

但是您的Schema.rb建议您name表中有factories列。因此,请尝试在rails db表格中的控制台和交叉检查列上运行factories