2013-07-10 182 views
6

有點新的Rails的東西,在一點點。在Rails 4中保存嵌套模型

其中一個模型的處於的has_many/belongs_to的關聯取決於其他。

基本上,我的應用程序中創建一個「郵報」時,用戶可以還附上「圖像」。理想情況下,這是兩個獨立的模型。當用戶選擇一張照片時,一些JavaScript會將其上傳到Cloudinary,並將返回的數據(ID,寬度,高度等)JSON字符串化並設置在隱藏字段中。

# The HTML 
= f.hidden_field :images, :multiple => true, :class => "image-data" 

# Set our image data on the hidden field to be parsed by the server 
$(".image-data").val JSON.stringify(images) 

和當然,這種關係在我的崗位模型

has_many :images, :dependent => :destroy 
accepts_nested_attributes_for :images 

和我的形象模型存在

belongs_to :post 

在哪裏我迷路是做什麼用的序列化的圖像數據做在Post控件的創建方法上?簡單地解析JSON並保存它不會在保存創建與數據的圖像模式(和感覺不對):

params[:post][:images] = JSON.parse(params[:post][:images]) 

的這一切基本的高潮,以類似下面的參數:

{"post": {"title": "", "content": "", ..., "images": [{ "public_id": "", "bytes": 12345, "format": "jpg"}, { ..another image ... }]}} 

這整個過程似乎有點令人費解 - 什麼我現在做的,有沒有更好的辦法做我想在第一時間做什麼? (同樣是這樣的嵌套屬性,需要有強有力的參數......?)

編輯:

在這一點上,我得到這個錯誤:

Image(#91891690) expected, got ActionController::Parameters(#83350730) 

從這一行來了...

@post = current_user.reviews.new(post_params) 

好像它沒有創造從嵌套屬性的圖像,但它的預期。 (同樣的事情發生時:自動保存是否存在)。

+0

我有完全相同的問題 – nduplessis

+0

MB可以幫助http://stackoverflow.com/questions/10878930/got-activerecordassociationtypemismatch-on-model-save – user2915517

回答

6

剛剛與那個的ActionController ::參數誤差這一問題。你需要確保你允許使用所有必要的參數,你posts_controller,像這樣:

def post_params 
    params.fetch(:post).permit(:title, :content, 
          images_attributes: [:id, :public_id, :bytes, :format]) 
end 

重要的是要確保你允許image.id屬性是很重要的。

0

accepts_nested_attributes_for應該爲你照顧這個。所以做一個Post.create(params[:post])也應該照顧嵌套的圖像屬性。可能出現的問題是,您尚未在has_many關係中指定autosave。所以你可能想看看這是否有所作爲:

has_many :images, :dependent => :destroy, :autosave => true 

當你保存你的文章時,也應該保存圖像。

+0

感謝您的答覆。儘管我沒有看到任何區別,但我確實得到了一個我上面編輯過的有趣答案('爲了簡潔起見'Image expected,但是獲取了參數')。 – ICDevin

1

必須建立這樣的PARAMS:

params[:post][:images_attributes] = { ... } 

你的images的按鍵名稱需要*_attributes