2015-01-02 29 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

這確實是這個問題,爲了解決它,我需要重寫我的遷移並重新創建數據庫。 –

相關問題