8

'Attr_accessible' kaldırıldığında, sanal öznitelikleri (alıcı, ayarlayıcı) raylarda 4 nasıl kullanabilirim?Raylarda sanal özellikler 4

ben yönteme üzerine çıkıp burada

def tags_list 
    @tags = self.tags.collect(&:name).join(', ') 
    end 

sorunu olabilir alıyorum ama güncellemeye çalışırken aşağıda ayarlayıcı ulaşamadık,/oluşturun.

def tags_list=(tags) 
    @tags = tags 
    end 
+1

Attr_accessible alıyor musunuz ve attr_accessor karıştı mı? attr_accessible gitti - güçlü parametrelerle değiştirilecek. Ama bildiğim kadarıyla, attr_accessor kalır. – Edward

+0

Üzgünüz, onun attr_accessor: tags_list –

+2

Eğer attr_accessor kullanırsanız, bir alıcı veya ayarlayıcı tanımlamanız gerekmemelidir. attr_accessor, her ikisini de sizin için yaratan bir makrodur. –

cevap

12

Rails 4'teki sanal öznitelikleri kullanarak attr_accessible ile hemen hemen aynı. Sanal özniteliğinizi, denetleyicinizdeki izin verilen paramlara eklemelisiniz (attr_accessible yerine), daha sonra modelinize her zamanki gibi alıcı ve ayarlayıcı yöntemlerini ekleyin.

# your_controller.rb 
private 

def your_model_params 
    params.require(:your_model_name).permit(:tags_list) 
end 
+2

Ama şu anda #new ve #create ile çalışmıyor, bu da oldukça işe yaramıyor, çünkü her zaman ayrı ayrı "your_virtual_attr =: bir şeyler" yazmanız gerekiyor. Başkası bunu fark etti ve nasıl halledileceğine dair bir ipucu var mı? – phikes

+1

Ayrıca 'tag.new (tags_list: [1, 2])' nin 'tag_list =()' virtual özniteliğini 'tetiklemediğini de fark ettim. Bu bir hatadır? – Feech

+1

@phikes, bu sadece 'before_action: your_model_params' mı? İsteğe bağlı olarak specfiy:, sadece: [: new,: create] veya 'exlcude:, hariç: [: action1,: action2, etc.]'. –