2008-09-11 53 views

Trả lời

10

Tài nguyên đường ray cung cấp giao diện RESTful cho mô hình của bạn. Hãy xem.

Mẫu

class Contact < ActiveRecord::Base 
    ... 
end 

đường

map.resources :contacts 

khiển

class ContactsController < ApplicationController 
    ... 
    def show 
    @contact = Contact.find(params[:id] 

    respond_to do |format| 
     format.html 
     format.xml {render :xml => @contact} 
     format.js {render :json => @contact.json} 
    end 
    end 
    ... 
end 

Vì vậy, điều này mang lại cho bạn một giao diện API mà không cần phải xác định phương pháp đặc biệt để có được các loại đáp ứng được yêu cầu

Ví dụ:

/contacts/1 # Responds with regular html page 

/contacts/1.xml # Responds with xml output of Contact.find(1) and its attributes 

/contacts/1.js # Responds with json output of Contact.find(1) and its attributes 
+0

Câu trả lời hay! Nếu tôi có thể cập nhật nó lên Rails 3, phương thức json bây giờ có vẻ là to_json. Ít nhất đó là những gì làm việc cho tôi ... tức là @ contact.to_json – codedog

2

Rails monkeypatches hầu hết mọi thứ bạn muốn quan tâm để có một phương pháp #to_json.

Tắt đầu của tôi, bạn có thể làm điều đó cho các mảng băm, mảng và đối tượng ActiveRecord, bao gồm khoảng 95% trường hợp sử dụng mà bạn có thể muốn. Nếu bạn có các đối tượng tùy chỉnh của riêng bạn, nó là tầm thường để viết phương thức to_json của riêng bạn cho chúng, mà chỉ có thể mứt dữ liệu thành một băm và sau đó trả về băm được jsonized.

+0

monkeypatches? Tôi không biết điều đó có nghĩa là gì, nhưng tôi có thể đoán nó đề cập đến việc cung cấp phương thức đó cho hầu hết, nếu không phải tất cả, các đối tượng –

+1

Nó đang vá một đối tượng hiện có, thêm phương pháp hoặc thay đổi nó nếu nó tồn tại. Nó thực sự chỉ là phần mở rộng ngôn ngữ động. –

0

ActiveRecord cũng cung cấp các phương thức tương tác với JSON. Để tạo JSON ra khỏi đối tượng AR, chỉ cần gọi object.to_json. Để tạo một đối tượng AR ra khỏi JSON, bạn sẽ có thể tạo một đối tượng AR mới và sau đó gọi object.from_json .. theo như tôi đã hiểu, nhưng điều này không làm việc cho tôi.

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