1

我已經在我的用戶控制器,爲用戶創造的圖片下面的代碼外鍵:.build不能分配尚不存在

def new 
    @user = User.new 
    @pictures = @user.pictures.build({:placement => "front"},{:placement => "profile"}) 
    end 

然而,當我創建一個新用戶,它不是不會自動創建位置爲「front」或「profile」的圖片。事實上,圖片沒有任何更新。該照片模型

attr_accessible :placement 

和picture.rb

belongs_to :user 

和user.rb

has_many :pictures 
accepts_nested_attributes_for :pictures, allow_destroy: true 

爲什麼我的生成命令默默地失敗?

UPDATE

使用.save!我已經瞭解到,@pictures被轉讓,但問題是沒有被與之相關聯的user_id。當我故意分配user_id時,如:

def new 
    @user = User.new 
    @pictures = @user.pictures.build({:placement => "front", :user_id => @user.id},{:placement => "profile", :user_id => @user.id}) 
end 

它仍然不分配user_id。

奇怪的是,當我在rails控制檯中運行相同的命令時,確實將user_id指定爲

在@pictures命令運行之前,新的@user似乎沒有分配給他的自動標識,但控制檯版本是成功的,因爲它按順序執行操作。

所以,這就是爲什麼我看到一個空白的ID。

這是怎麼發生的?這不是同時編號分配的東西模型應該照顧與belongs_tohas_many,和accepts_nested_attributes_for

如果將鏈接到一起的ID在保存後才創建,那麼解決分配嵌套屬性的適當方法是什麼?

爲什麼這不起作用?

回答

0

它在文檔中:在保存之後,用戶標識由數據庫分配。所以你必須先保存用戶,然後才能使用user_id。

如果將user_id => @ user.id更改爲:user => @user,它應該可以工作,因爲Rails能夠按照正確的順序保存它們,它知道它還沒有保存並需要更新這些關係。

+0

將'@ user.id'更改爲'@ user'。同樣的問題。 – Mittenchops 2012-08-10 14:40:16

+0

此外,這給了我一個'不能批量分配受保護的屬性:用戶錯誤。 – Mittenchops 2012-08-13 15:06:14

1

不確定這是否是您的問題,但您需要將:user_id添加到picture.rb中的attr_acessible行。你想要讀/寫的任何屬性都需要attr_accessible,否則你會得到這個質量分配錯誤。