2012-01-01 50 views
3

我正試圖在我的畫廊中創建一個新的圖片記錄。用戶可以創建一個供應商,並從那裏創建許多畫廊。每個畫廊可以有很多圖片。在嘗試通過圖片的新視圖創建新圖片時,新動作發生問題。這樣做,我的控制器方法是...Has_many協會沒有被看到?主動記錄關係錯誤

def new 
    @picture = current_account.vendor.galleries.pictures.new 
end 

但是,這將返回一個未定義的方法錯誤'圖片'activerecord關係。

NoMethodError在客戶端:: PicturesController#新 未定義的方法`圖片ActiveRecord的::關係......

完全通過@picture據透露繞過協會= Picture.new工作正常,但我試圖適當的範圍(希望這是正確的詞)的畫廊/供應商&用戶帳戶。

什麼讓我困惑的是,聯想似乎通過畫廊新建/編輯形式通過fields_for & accepts_nestred_attributes_for直接合作(@gallery = current_account.vendor.galleries.new是畫廊的新方法),但是專用的畫面創作從分離每個早期文本的圖庫編輯/新表單錯誤。

我試過把硬編碼的圖庫ID直接扔到@picture = current_account.vendor.galleries(:id => 4).pictures.new中,就像絕望的猜測一樣,但圖片仍然被破壞。

我有點覺得我失去了一些明顯的東西。有什麼想法嗎?

謝謝你的時間。

剪斷機型...

class Gallery < ActiveRecord::Base 
    belongs_to :vendor 
    has_many :pictures 

    class Picture < ActiveRecord::Base 
     belongs_to :vendor 
     belongs_to :gallery 

(我驗證過的圖片表有gallery_id:整數列)

剪斷線路(剪斷客戶端命名空間)...

資源:廠商代號

resources :galleries do 
    resources :pictures 
end 

年底

回答

1

如果Vendor has_many :galleries,你需要指定從創建圖片這畫廊:

@picture = current_account.vendor.galleries.first.pictures.build 

或別的東西,挑選一個特定畫廊

[編輯]的

的正確形式
@picture = current_account.vendor.galleries(:id => 4).pictures.new 

@picture = current_account.vendor.galleries.find { |g| g.id == 4 }.pictures.build 

您也可以嘗試(因爲galleries是一個關係)

@picture = current_account.vendor.galleries.where(:id => 4).pictures.new 
+0

感謝您的幫助,布蘭頓!事情現在按預期工作。你的例子非常有幫助。最後一個例子最初返回了相同的關係錯誤,但是根據第一個例子,在圖片前面「堅持」第一個東西已經啓動並運行了。我想我需要進一步閱讀延遲加載。 [:我仍然低於stackexchange讓我給你投票之前所要求的最低聲望點數,但是一旦達到最低限度,我會回頭去做。 – StrandedPanda 2012-01-01 08:26:49

相關問題