Archive for the 'Ruby และ Rails' Category

การใช้ jQuery Ajax put กับ delete ใน Ruby on Rails

สืบเนื่องมาจากไปอ่าน blog rails66 แล้วได้อ่าน entry ของ sikachu เสร็จแล้วเห็นวิธีเขียนแต่ยังมองแล้วเข้าใจรวมถึงอ่านยาก เลยพยายามหาว่ามีวิธีเขียนแบบอื่นไหมสรุปว่าก็มีจริงๆครับแล้วก็ใช้ได้ 100% เพราะทดสอบแล้ว ดังนั้นผมจะมาเขียนให้อ่านกันครับ โดยยึดหลักของ entry นี้ใน rails66 ครับ โดยเริ่มต้นนอกเหนือจากการใส่ jquery เข้าไปในระบบแล้ว ที่มีปัญหาคือเรื่อง authenticity_token ซึ่งเจ้านี้คือตัวปัญหาที่ทำให้เรา เวลาจะส่ง ajax เป็นแบบ post / put / delete ทีไรก็มีปัญหาทุกที เราเลยมีวิธีแก้มาให้ครับ โดยผมได้ดัดแปลงนิดหน่อยจาก entry rails66 โดยเริ่มแรกให้ใส่ method นี้ลงไปใน application_helper.rb ครับ

def yield_authenticity_token
if protect_against_forgery?
%Q{
<script type=’text/javascript’>
//<![CDATA[
var AUTH_TOKEN = #{form_authenticity_token.inspect};
//]]>
</script>
}
end
end

ส่วนต่อมาให้เรานำ code นี้ไปใส่ใน application.js ใน public/javascript ครับ

(function($) {
$().ajaxSend(function(event, request, settings){ //Set request headers globally
request.setRequestHeader(“Accept”, “text/javascript, text/html, application/xml, text/xml, */*”);
request.setRequestHeader(“Content-Type”, “application/x-www-form-urlencoded”);
if (typeof(AUTH_TOKEN) == “undefined”) return;
settings.data = settings.data || “”;
// settings.data is a serialized string like “foo=bar&baz=boink” (or null)
settings.data += ((settings.data == “”) ? “” : “&”) + “authenticity_token=” + encodeURIComponent(AUTH_TOKEN);
});
})(jQuery);

เสร็จแล้วสุดท้ายให้เรานำ code นี้ไปใส่ใน application layout หรือใน page ที่ต้องการใช้งาน

<%=yield_authenticity_token%>

ส่วนวิธีใช้ก็ประมาณนี้ครับ

$.post(“hello/10″,{_method:”delete”},function(data){
$(“h1″).html(data);
});

โดยปกติแล้วถ้าเราไม่ทำแบบนี้เราต้องทำการส่ง authenticity_token ไปทุกครั้ง

$.post(“hello/put”,{_method:”put”,authenticity_token:encodeURIComponent(AUTH_TOKEN)},function(data){
$(“h1″).html(data);
});

โดยเจ้า AUTH_TOKEN นั้นจะต้องทำการ gen มาจาก form_authenticity_token.inspect ใน rails ซึ่งยุ่งยากหลายขั้นตอนเหลือเกิน ดังนั้นเลยต้องมีการทำแบบนี้ึึขึ้นมา โดยผมนำข้อมูลมาจากแหล่งเหล่านี้ครับ

  • http://blog.lawrencepit.com/2008/09/04/unobtrusive-jquery-rails/
  • http://pastie.org/212798
  • http://www.rails66.com/blog/?p=246
  • http://henrik.nyh.se/2008/05/rails-authenticity-token-with-jquery

Simply Rails 2 ~ Book Review ~

ruby and rails

หลังจากที่ไม่ค่อยอัพบล็อค วันนี้ผมขอมา Review หนังสือที่ผมได้อ่านจบไปเมื่อวานนี้ โดยใช้เวลาอ่านตั้งแต่ช่วง Thailand Next Web Apps 2008 เป็นเวลาเดือนหนึ่งพอดีต้องขอบอกว่าพอใจกับหนังสือเล่มนี้มากเลยได้ความรู้เรื่อง Rails 2 มาเยอะรวมถึง Convention over Configuration ของมันไปเยอะพอตัวเลยทีเดียว เอาละครับผมจะสรุปให้ฟังว่าเหมาะกับใครเป็นผู้่อ่าน

หนังสือ Simply Rails 2 มีประมาณ 500 หน้าโดยผมก็ค่อยๆอ่านไปเรื่อยๆ โดยก่อนที่ผมจะมาอ่านหนังสือเล่มนี้ผมอ่านหนังสือ Ruby มาหลายเล่มเหมือนกัน ทำให้ผมข้ามเนื้อหาช่วง Ruby ไปค่อนข้างเร็วซึ่งก็ประมาณ 200 หน้าได้ โดยจริงๆแล้วเล่มนี้เหมาะสมกับ

  • คนที่มีประสบการณ์ การเขียน MVC ด้วย Framework หรือปกติมาบ้างแล้ว
  • คนที่ต้องการศึกษาว่าเร็วมี Convention อย่างไรบ้าง
  • คนที่ต้องการดูกลไกการทำงานของ Rails แบบภาพรวมไม่ใช่เชิงลึก

โดยเนื้อหาที่มีจะคลอบคลุมทั้ง Ruby และ Rails 2 โดยเล่มนี้ที่ผมตัดสินใจอ่านแล้วได้ผลดีก็คือมันทำมาเพื่อ Rails 2 ดังนั้นใครใช้ version 2 ก็จะพอทำได้ โดยที่ผมใช้ทำตามแบบฝึกหัดเล่มนี้ผมใช้ Netbeans 6.5beta (แต่หนังสือใช้แบบ console ธรรมดาเลยนะ) ซึ่งก็สะดวกดีครับ เขียนน้อยได้เยอะจริงๆ แถม code สวยและมีความหมายทั้งเรื่องครับ โดยเล่มนี้จะไม่สอนเฉพาะ code ยังไงจะรวมถึงอธิบายด้วยว่า ทำไมต้องตั้งชื่อแบบนี้เป็น Convetion หรือเป็น Best Practice ที่ควรทำ โดยต้องอาศัยอ่านไปมาเล็กน้อยสำหรับคนที่ยังใหม่กับ Ruby หรือ Rails โดยส่วนตัวเล่มนี้ผมให้ 7.5/10 ครับเขียนได้ดี เข้าใจง่ายเป็นแบบเรียนไปทำไปครับ ใครชอบอ่านอย่างเดียวเล่มนี้จะไม่เห็นภาพ ที่สำคัญ Rails 2 อันนี้พูดถึงเรื่อง Test ด้วยนะครับ จะได้รู้ว่า Rails มีดีที่ Test ด้วยเหมือนกันครับ วันนี้ลาไปก่อนสวัสดีครับ

Next Page »