2011-06-16 103 views
1

在我的模型我有「數據對象:: IntegrityError(錯誤:在列空值違反非空約束」 在軌誤差3

class Alias 
    include DataMapper::Resource 


    belongs_to :user 


    property :id, String, :key => true, :required => true, :unique => true 

    validates_format_of :id, :with => /[0-9a-z\-]/i 

在我的控制器:

def new 
    @new_alias = @owner.aliases.new() 
end 
    def create 
     @owner = current_user 
     @alias = @owner.aliases.create(params[:alias]) 
end 

在我看來

<%= form_for @new_alias, :url => {:controller => "aliases", :action=>"create"} do |f| %> 
    <%= f.text_field :id, :placeholder => "Account name" %></br> 
    <%= f.submit :value => "Create" %> 
<% end %> 

對我來說,它看起來preatty正常,但是當我試圖保存新的別名,它導致用:

ERROR: null value in column "alias_id" violates not-null constraint 

Processing by AliasesController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"/token=", "alias"=>{"id"=>"IDNAME"}, "commit"=>"Create"} ~ SQL (0.632ms) SELECT "id", "encrypted_password", "remember_created_at", "reset_password_token", "reset_password_sent_at", "failed_attempts", "unlock_token", "locked_at", "sign_in_count", "current_sign_in_at", "last_sign_in_at", "current_sign_in_ip", "last_sign_in_ip", "username", "email", "name", "country" FROM "users" WHERE "id" IN (2) LIMIT 1 ~
SQL (0.491ms) SELECT "id" FROM "aliases" WHERE "id" = 'IDNAME' ORDER BY "id" LIMIT 1 Completed in 11ms ~ SQL (0.531ms) INSERT INTO "aliases" ("id", "user_id") VALUES ('IDNAME', 2) ~ ERROR: null value in column "alias_id" violates not-null constraint (code: 33575106, sql state: 23502, query: INSERT INTO "aliases" ("id", "user_id") VALUES ('IDNAME', 2), uri: postgres:[email protected]:5432postgres?adapter=postgres&host=localhost&port=5432&username=name&password=pass&database=postgres&path=postgres&schema_search_path=public&encoding=utf8&template=template0)

DataObjects::IntegrityError (ERROR: null value in column "alias_id" violates not-null constraint):
app/controllers/aliases_controller.rb:5:in `create'

可能是什麼問題呢?我正在使用rails3,postgres和datamapper。

回答

0

不熟悉rails內部函數,但是您的列的定義必須是允許空值。

2

看起來您的數據庫中有未定義在您的模型中的字段,並且其中一些字段對它們有非空限制。由於datamapper只寫入它所瞭解的字段(在本例中爲:id),因此它不會爲該表中可能存在的任何其他字段指定值。由於未指定的字段需要值,因此PgSQL會產生錯誤。

要麼刪除非空約束,要麼將這些字段添加到DataMapper中,其值爲:default

0

我有與數據映射器相同的問題。 這是我做過什麼來解決這個問題:

別名類,如下所示添加一個附加行:

property :user_id, Integer 

這一行定義外鍵。

相關問題