2015-10-07 82 views
1

我使用simple_form與繭(https://github.com/nathanvda/cocoon),並且一切運作良好。空的link_to_add_association爲繭嵌套屬性

我真的真的不喜歡的唯一的事情是,我必須初始化空的情況下,使其工作:

def new 
    @facility = Facility.friendly.find(params[:facility_slug]) 
    @pet = @facility.pets.build(animal: Dog.new) 
    @pet.pet_pictures.build 
    @pet.animal.mixtures.build 
end 

最後2行用於製作繭link_to_add_association工作,如果我刪除它們link_to_add_association是完全空的。

是否有人知道如何使這一點更習慣和避免顯式調用構建方法?我怎樣才能改進這個代碼?

+0

你是什麼意思'link_to_add_association'是空的?我已經使用過繭,並且從來不必爲了使它工作而建立物品。帶有關聯和視圖代碼的模型代碼中有什麼? –

+0

這實際上很奇怪,我同意:基本上它不輸出任何東西。您可以確認您是從頭開始創建記錄,而不是將關聯添加到已有的記錄中? – ngw

回答

1

我該如何改進此代碼?

通過將代碼模型:

#app/models/facility.rb 
class Facility < ActiveRecord::Base 
    def construct_pet animal 
     model = animal.to_s.constantize 
     pet = pets.build animal: model.send(:new) 
     pet.pet_pictures.build 
     pet.animal_mixtures.build 
     pet 
    end 
end 

#app/controllers/facilities_controller.rb 
class FacilitiesController < ApplicationController 
    def new 
     @facility = Facility.find(params[:facility_slug]).construct_pet(:dog) 
    end 
end 

你的問題是不是與繭,它的軌道上。

讓我解釋一下:


fields_for

你必須記住,Rails是面向對象,在學期的每一個感覺。

這意味着如果你想創建依賴數據(IE嵌套字段),你必須建立相關的關聯模型實例。

有沒有得到這個;如果你不構建模型,Rails將不知道如何構建方法。

當您創建相關模型(IE傳遞數據爲accepts_nested_attributes_for)時,Rails必須通過相關模型的實例。

如果您不構建依賴模型,則不會獲得任何相關字段,因此它不起作用。

在完全相同的方式Cocoon uses fields_for,你會如果你「手動」做到了:

enter image description here

你可以從這個RailsCastthis answer I literally just wrote看到。

-

避免顯式調用build方法

N'est PAS可能,週一急性心肌梗死。

build方法創建實例關聯模型的實例。如果您不希望它們顯示(需要獲得fields_for),則無法使用它們。