2012-01-29 50 views
10

Tôi có một đối tượng trong Rails có thuộc tính A, B, C, D và E. Khi truyền đối tượng này quay lại phía máy khách thông qua đối tượng JSON, cách thế nào tôi có thể nói cho bộ điều khiển đường ray chỉ bao gồm các thuộc tính A và D trong đối tượng JSON?Chỉ định các thuộc tính của đối tượng Rails được chuyển vào đối tượng JSON

Trong vòng điều khiển người dùng của tôi, mã của tôi là như sau:

@user = User.find(params[:id]) 

    respond_to do |format| 
     format.html 
     format.json { render :json => @user} 
    end 

Mã này hoạt động, tuy nhiên, đối tượng JSON được trả về có chứa tất cả các thuộc tính của đối tượng @user. Làm thế nào tôi có thể giới hạn các thuộc tính được bao gồm trong đối tượng JSON trước khi bất cứ điều gì được gửi lại cho khách hàng?

CẬP NHẬT: lucapette cung cấp một số thông tin cơ bản về những gì đang diễn ra đằng sau hậu trường. Kể từ khi có những lúc tôi có lẽ muốn tất cả các thuộc tính trở về, tôi đã kết thúc bằng cách sử dụng đoạn mã sau:

format.json { render :json => @user.to_json(:only => ["id"])} 

Trả lời

15
render :json => @user 

sẽ gọi to_json trên đối tượng @user. Và phương pháp to_json sẽ sử dụng phương thức as_json để thực hiện công việc của nó. Vì vậy, bạn có thể dễ dàng ghi đè số as_json để chỉ chuyển những gì bạn muốn cho khách hàng. Giống như trong những điều sau đây:

def as_json options={} 
    { 
    attr1: attr1, 
    attr2: attr2 
    } 
end 
+3

Cảm ơn, lucapette. Sau khi đọc câu trả lời của bạn, tôi đã xem xét các phương thức to_json và as_json. Sau đó, tôi đã sửa đổi mã của mình như sau: format.json {render: json => @ user.to_json (: only => ["id"])}. Có vẻ như phải có một số mã thừa trong đó nhưng tôi không thể tìm thấy một cách khác để làm cho nó hoạt động. – Vee

+0

yep, bạn cũng có thể sử dụng các tùy chọn này. Nó hoạt động tốt theo cách đó quá. Nó thực sự phụ thuộc vào tình hình bạn phải đối mặt. – lucapette

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