Misalkan Anda berada di pengontrol pengguna Anda dan Anda ingin mendapatkan respons json untuk permintaan acara, alangkah baiknya jika Anda dapat membuat file dalam tampilan / pengguna / direktori Anda, bernama show.json dan setelah pengguna Anda # tampilkan tindakan selesai, itu membuat file.
Saat ini Anda perlu melakukan sesuatu seperti:
def show
@user = User.find( params[:id] )
respond_to do |format|
format.html
format.json{
render :json => @user.to_json
}
end
end
Tapi alangkah baiknya jika Anda bisa membuat file show.json yang secara otomatis di-render seperti:
def show
@user = User.find( params[:id] )
respond_to do |format|
format.html
format.json
end
end
Ini akan menyelamatkan saya dari banyak kesedihan, dan akan menghilangkan perasaan kotor yang mengerikan yang saya dapatkan ketika saya memberikan json saya di controller.
format.json
denganshow.json.erb
file. Lihat jawaban saya.Jawaban:
Anda harus dapat melakukan sesuatu seperti ini di
respond_to
blok Anda :yang akan merender template di
app/views/users/_show.json.erb
.sumber
Coba tambahkan tampilan.
users/show.json.erb
Ini harus di-render ketika Anda membuat permintaan untuk format JSON, dan Anda mendapatkan manfaat tambahan dari itu dirender oleh erb juga, sehingga file Anda bisa terlihat seperti inisumber
@user.first_name.to_json
sebagai gantinyaescape_javascript
. Ada beberapa perbedaan halus antara apa yang diizinkan JS dan apa yang benar - benar JSON. (Dan perbedaan-perbedaan itu menjadi penting ketika browser mengimplementasikan parser JSON mereka sendiri.)<%= xyz.to_json %>
jika tidak, Anda akan memiliki tanda kutip tambahan.Seperti yang disebutkan orang lain, Anda memerlukan tampilan pengguna / show.json, tetapi ada opsi untuk dipertimbangkan untuk bahasa templating ...
ERB
Bekerja di luar kotak. Bagus untuk HTML, tetapi Anda akan dengan cepat merasakannya buruk untuk JSON.
RABL
Solusi yang bagus Harus menambahkan ketergantungan dan mempelajari DSL-nya.
JSON Builder
Kesepakatan yang sama dengan RABL: Solusi yang bagus. Harus menambahkan ketergantungan dan mempelajari DSL-nya.
Ruby Biasa
Ruby luar biasa dalam menghasilkan JSON dan tidak ada yang baru untuk dipelajari karena Anda dapat memanggil objek
to_json
Hash atau AR. Cukup daftarkan ekstensi .rb untuk templat (dalam inisialisasi):Kemudian buat tampilan pengguna / show.json.rb:
Untuk info lebih lanjut tentang pendekatan ini lihat http://railscasts.com/episodes/379-template-handlers
sumber
RABL mungkin solusi terbaik untuk ini yang pernah saya lihat jika Anda mencari alternatif yang lebih bersih untuk sintaks ERb. json_builder dan argonaut, yang merupakan solusi lain, keduanya tampak agak ketinggalan jaman dan tidak akan berfungsi dengan Rails 3.1 tanpa perbaikan.
RABL tersedia melalui permata atau lihat repositori GitHub; contoh yang bagus juga
https://github.com/nesquena/rabl
sumber
Sekedar memperbarui jawaban ini demi orang lain yang kebetulan berakhir di halaman ini.
Di Rails 3, Anda hanya perlu membuat file di
views/users/show.json.erb
. The@user
objek akan tersedia untuk tampilan (seperti itu akan untuk html.) Anda bahkan tidak perluto_json
lagi.Untuk meringkas, hanya saja
dan
sumber
respond_with @user, only: [:name]
. Lihat tutorial ini untuk informasi lebih lanjut.Cukup tambahkan
show.json.erb
file dengan kontenKadang-kadang berguna ketika Anda memerlukan beberapa metode pembantu tambahan yang tidak tersedia di controller, yaitu
image_path(@user.avatar)
atau sesuatu untuk menghasilkan properti tambahan di JSON:sumber
<%= raw(@user.to_json) %>
untuk menghindari melarikan diri HTML. Apa yang saya lakukan adalah bahwa saya mengandalkan to_json selama itu memberi saya apa yang saya inginkan, tetapi ketika saya ingin melakukan sesuatu yang lain saya templat dengan apa yang biasanya a{ :blah => @user.the_blah }.to_json
.Ini berpotensi pilihan yang lebih baik dan lebih cepat daripada ERB: https://github.com/dewski/json_builder
sumber
Saya baru mengenal RoR inilah yang saya temukan. Anda dapat langsung membuat format json
sumber