2010-03-15 32 views
6

Khi sử dụng :methods trong to_json, có cách nào để đổi tên khóa không? Tôi đang cố gắng thay thế id thực bằng phiên bản base62 của nó và tôi muốn giá trị base62_id để có khóa :id.sử dụng khóa khác nhau cho to_json: phương pháp

@obj.to_json(
    :except => :id 
    :methods => :base62_id 
) 

tôi đã cố gắng để làm

@obj.to_json(
    :except => :id 
    :methods => { :id => :base62_id } 
) 

nhưng điều đó không làm việc.

Bạn có lời khuyên nào không?

Trả lời

2

Bộ nối tiếp to_json sử dụng tên của phương thức làm khóa để tuần tự hóa. Vì vậy, bạn không thể sử dụng tùy chọn methods cho việc này. Thật không may to_json phương pháp doesn t accept tham số block`, nếu không bạn có thể làm một cái gì đó tương tự như

@obj.to_json(:except => :id) {|json| json.id = base62_id } 

Vì vậy mà lá chúng tôi với một hack xấu xí như:

def to_json(options={}) 
    oid, self.id = self.id, self.base62_id(self.id) 
    super 
ensure 
    self.id = oid 
end 

Bây giờ to_json sẽ trả lại kết quả mong đợi .

Các vấn đề liên quan