2015-01-02 30 views
0

我在创建数据库中的新日志时遇到问题。我最近从一个过时的rails版本升级到最新版本,所以我不太确定发生了什么变化。升级后我一直在修复很多错误,但是我很难在这个版本中找到。它抱怨没有工厂的名称属性,但是当我打开我的Schema时,它似乎在那里,所以我不知道该从哪里去。如何使用rails创建数据库记录? - ActiveRecord :: UnknownAttributeError

查看

= 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 

错误:

未知属性 '名' 工厂。 提取的源(左右线#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"} 
+0

你能告诉我们'user_params'的定义吗? – bratsche

+0

可以显示数据库表和存在的字段吗? – locoboy

+0

得到它的工作,我的实际数据库确实不同于我的schema.rb(使用rails db和.schema来检查)。然后我删除了我的数据库,重写了迁移,并重新创建了所有内容,现在它工作得很好。 –

回答

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错误,您可以在控制器中调用“失败”,然后进入更好的错误控制台并运行命令,就好像您在控制器中的确切时刻处于命令行一样。玩一玩,看看它是否有效。

5)尝试重写代码,看看它是否在重写时没有遇到同样的错误。

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

希望这会有所帮助!

+1

原来这是#1的问题,我的底层数据库和架构以某种方式断开连接。谢谢您的帮助! –

+0

当然,没问题:-) –

1

ActiveRecord::UnknownAttributeError清楚地表明,你不必在你的数据库(映射列name你的情况)。

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

+0

这确实是这个问题,为了解决它,我需要重写我的迁移并重新创建数据库。 –

相关问题