1

谷歌搜索爲此,我看到Rails核心團隊正在爲Rails 4開發一個解決方案,但這是一種解決方法。無法創建記錄,因爲連接表需要created_at(HABTM + Rails)

UsersCircles都與另一個具有has_and_belongs_to_many關係。

我的模式是這樣的:

create_table "circles", :force => true do |t| 
    t.string "name" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    end 

    create_table "circles_users", :force => true do |t| 
    t.integer "circle_id" 
    t.integer "user_id" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    end 

    create_table "users", :force => true do |t| 
    t.string "name" 
    t.string "email" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    t.string "password" 
    end 

但在我的代碼,在我circles_controller當我嘗試這樣做:

def create 
    @circle = Circle.new(params[:circle]) 
    @circle.users << User.find(session[:user].id) 
... 

我得到了我的瀏覽器中出現以下錯誤:

SQLite3::ConstraintException: circles_users.created_at may not be NULL: INSERT INTO "circles_users" ("circle_id", "user_id") VALUES (11, 5)

我該怎麼處理created_atupdated_at在這裏是錯誤的嗎?

+0

爲了您的信息:has_and_belongs_to_many也被稱爲「多對多」的關係。 – Kamil

回答

0

試試這個

def new 
@circle = Circle.new 
1.times { @circle.users.build } if @circle.users.nil? 
end 

def create 
    @circle = Circle.new(params[:circle]) 
    @circle.update_attributes(session[:user]) # this will automatically update location table by using relationship 
    @circle.save 
end 

看到HABTM

+0

構建給了我一個新的錯誤,'未定義的方法stringify_keys'。我也認爲這會有助於以某種方式編寫遷移以使'created_at'和'updated_at'字段爲'null => true' –

+0

我更新我的答案請嘗試 –

+0

@ circle.location是什麼? –

-1

在這些日期時間字段,你應該插入當前時間戳或將其更改可空字段,如果你不使用數據填充它們。

0

就試試這個

def create 
    @circle = Circle.new(params[:circle]) 
    @circle.users = [User.find(session[:user].id)] 

可能無法正常工作,我還沒有嘗試過在當地,SRY生根粉那^ _^

1

我最終得到它通過從時間戳工作用於創建連接表的遷移。

正確的模式應該是這樣的:

create_table "circles_users", :force => true do |t| 
t.integer "circle_id" 
t.integer "user_id" 
    end 
相關問題