2010-04-30 30 views
20

Bir nesnede to_json yöntemini kullanıyorum ve :methods bağımsız değişkeninin çalışmasını sağlamaya çalışıyorum. Benim modelimde (Drop) is_favorited_by_user? adı verilen bir yöntem var. Bu yöntem, current_user bir bağımsız değişkenini alır ve sonra da, kullanıcının kullanıcı tarafından tercih edilmesinin olup olmadığını denetler. Bu bağımsız değişkeni to_json yönteminden nasıl geçirebilirim. to_json alırRuby to_json: yöntem argümanları

render :json => @drops.to_json(:methods => :is_favorited_by_user?(current_user)) 

cevap

36

Sen modeline current_user öznitelik eklemek ve to_json

attr_accessor :current_user 

    def is_favorited_by_user?(user=nil) 
    user ||= current_user 
    # rest of your code 
    end 


@drops.current_user = current_user 
render :json => @drops.to_json(:methods => :is_favorited_by_user?) 
+0

Bu işe yaradı! Sağol Voyta! –

+4

Oluşturduğumda bu çözümü nasıl genişletirim: indeks eyleminde json => Drop.all. Current_user öğesini nerede atadım? –

+3

'cattr_accessor: current_user' modelinde ve ardından 'Model.current_user = current_user' denetleyicide. –

4

yöntemleri bağımsız değişkenler alan olanlar, ama sadece "alıcı" yöntemleri olarak amaçlanmamıştır. (Genellikle hangilerinin db niteliklere göre oluşturulur.)

burada örnekler, hiçbiri pas argümanlar bakınız: Bir şeyin özel yapmak istiyorsanız

http://apidock.com/rails/ActiveRecord/Serialization/to_json

, bir yöntem oluşturmak için ihtiyaç duyacakları İstediğiniz bilgi karmasını oluşturur, daha sonra bu karmayu json'a dönüştürür.

+1

benim model içinde örnein değişkeni alabilirsiniz bir yolu var mı çalıştırmadan önce ayarlayın, bu yüzden tartışmayı geçmesine gerek yok ki? –

+0

@JamesFinley Modeller, denetleyicilerin veya http isteğinin durumunun farkında değildir (ve olmamalıdır). current_user, talebin bir parçasıdır ve yukarıda belirtilen çok iş parçacıklı sorun nedeniyle modellere küresel bir şekilde maruz bırakılmamalıdır. Sadece bir metod parametresi olarak geçirilmelidir. – hammady