আপনি কোডটি দুটি ভাগে বিভক্ত করেছেন কিনা তা বোঝা সহজ।
প্রথম অংশটি $("#reviews").append("<%= ... %>");
এরব সহ জাভাস্ক্রিপ্ট। এর অর্থ <%= ... %>
এটির অভ্যন্তরীণ রুবি কোড যা ফিরে আসবে তা প্রতিস্থাপিত হবে। সেই প্রতিস্থাপনের ফলাফলটি অবশ্যই বৈধ জাভাস্ক্রিপ্ট হতে হবে, অন্যথায় ক্লায়েন্ট যখন এটি প্রক্রিয়া করার চেষ্টা করবে তখন এটি একটি ত্রুটি ছুঁড়ে দেবে। সুতরাং এটি প্রথম জিনিস: আপনার বৈধ জাভাস্ক্রিপ্ট দরকার ।
আরেকটি বিষয় আমলে নেওয়ার বিষয়টি হ'ল রুবি যা কিছু উত্পন্ন করে তা অবশ্যই জাভাস্ক্রিপ্টের স্ট্রিংয়ের ভিতরে ডাবল কোট যুক্ত থাকতে হবে - এর চারপাশে ডাবল উদ্ধৃতি লক্ষ্য করুন <%= ... %>
। এর অর্থ হ'ল উত্পন্ন জাভাস্ক্রিপ্টটি এর মতো দেখাবে:
$("#reviews").append("...");
এখন আসুন এর ভিতরে রুবি অংশটি পরীক্ষা করি <%= ... %>
। কি করে render(:partial => @review)
? এটি একটি আংশিক রেন্ডারিং করছে - যার অর্থ এটি কোনও ধরণের কোড - এইচটিএমএল, সিএসএস ... বা আরও বেশি জাভাস্ক্রিপ্ট রেন্ডারিং হতে পারে!
সুতরাং, যদি আমাদের আংশিক কিছু সাধারণ এইচটিএমএল থাকে তবে এটি কী ঘটবে?
<a href="/mycontroller/myaction">Action!</a>
মনে রাখবেন যে আপনার জাভাস্ক্রিপ্টটি প্যারামিটার হিসাবে একটি ডাবল-কোটেড স্ট্রিং নিচ্ছে? আমরা যদি <%= ... %>
সেই অংশটির কোডটি সহজভাবে প্রতিস্থাপন করি , তবে আমাদের একটি সমস্যা আছে - এর পরে href=
ডাবল উক্তিটি পাওয়া যাওয়ার পরে ! জাভাস্ক্রিপ্ট বৈধ হবে না:
// Without escaping, you get a broken javascript string at href
$("#reviews").append("<a href="/mycontroller/myaction">Action!</a>");
এটি না হওয়ার জন্য, আপনি এই বিশেষ অক্ষরগুলি থেকে পালাতে চান যাতে আপনার স্ট্রিংটি কাটা না হয় - আপনার এমন কিছু প্রয়োজন যা এর পরিবর্তে এটি তৈরি করে:
<a href=\"/mycontroller/myaction\">Action!</a>
এটি কি escape_javascript
করে। এটি নিশ্চিত করে যে ফিরে আসা স্ট্রিং জাভাস্ক্রিপ্ট "ব্রেক" করবে না। আপনি যদি এটি ব্যবহার করেন তবে আপনি পছন্দসই আউটপুট পাবেন:
$("#reviews").append("<a href=\"/mycontroller/myaction\">Action!</a>")
শুভেচ্ছা সহ!