undefined method `scaffold' for AdminController:Class(แก้ไข)

  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.
  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.

ขอโทษด้วยนะครับ สำหรับบทความอันเก่า …ขอแก้ตัวนะครับ

ผมจะขอสรุปขั้นตอนที่ผมทำอย่างคร่าวๆ นะคับ ( on ubuntu 8 )

  1. ผมติดตั้ง rails ผ่าน Synaptic package manage ครับ พอติดตั้งเสร็จ ระบบแจ้งว่าเป็น Rails 2.0.2-1ubuntu1
  2. และผมติดตั้ง ruby 1.8 ครับ และ rubygems 0.9.4-4 และ libgems-ruby1.8
  3. ให้ติดต่อกับฐานข้อมูล Mysql ซึ่งใช้ phpmyadmin ช่วยในกาสร้างฐานข้อมูลครับ
  4. ผมสร้างโปรเจกด้วยคำสั่ง $ rails depot
  5. จากนั้นผมสร้างฐานข้อมูลชื่อ depot_development และสร้างตางรางข้อมูลชื่อ tables
  6. เข้าไปแก้สิทธิ์ไฟล์ database.yml ด้วยคำสั่ง $ sudo chmod 777 database.yml จากนั้นเข้าไปแก้ไฟล์ database.yml โดย ไปกำหนดชื่อ username ,password ,databasename ให้ตรงกับฐานข้อมูลที่เราสร้างในข้อ 5
  7. จากนั้นผมจะสร้าง admin_controller เพื่อให้สามารถติดต่อกับฐานข้อมูล depot_development ในตารางชื่อ tables ด้วยคำสั่งนี้ครับ $ ruby script/generate scaffold tables Admin

    ซึ่งระบบจะแจ้ง error เป็น wrong number of arguments (1 for 2) ครับ

    ** ผมเลยมาโพสถามใน codenone พี่ๆเค้าบอกว่าให้ลองใช้คำสั่งต่อไปนี้ครับ

  8. $ ruby script/generate scaffold tables

    $ ruby scritp/generat scaffold admin

    ซึ่งระบบไม่ได้แจ้งข้อผิดพลาดอะไร แต่พอผมลองทดสอบจากนั้นเว็บบราว์เซอร์

    ระบบจะแจ้งข้อผิดพลาดเป็น

    undefined method `scaffold’ for AdminController:Class ครับ

ตั้งคำถามไม่ชวนตอบเลย มีอะไรก็แปะๆมา ไม่มีการ format คำถามให้อ่านง่ายเลย
(อยากได้คำตอบ แต่ไม่ทำอะไรเพื่อช่วยคนตอบเลย)

rails 2.0, เจ้า dynamic scaffold มันไม่มีแล้ว
ถ้าอยากใช้ก็มีทางเลือก 2 ทาง
1. หันไปใช้ rails version 1.2.x เสีย
2. ติดตั้ง scaffold plugin โดยใช้คำสั่ง script/plugin install scaffolding

ที่ผมเคยลองข้อ 2. มันจะบ่นต่อว่า Paginate ไม่มีแล้วเหมือนกันครับ ต้องลงเพิ่มอีก ตอนนี้เหมือนดูในเว็บเค้าให้ไปลง will_paginate plugin ครับ http://rock.errtheblog.com/will_paginate

แล้วเปลี่ยนจาก rails version 2.0.2 เป็น rails version 1.2.x อย่างไงครับ

ผมไปดาวน์โลหดไฟล์ที่ http://rubyforge.org/frs/?group_id=307 แล้วไม่เห็นมีตัว install ในไฟล์ท่ดาวน์โหลดมาเลยครับ

และผมก็ search หาใน Synaptic package manage ระบบจะพบแค่ rail version 2.0.2 ครับ

****** อย่าถือสา เด็กที่ไม่รู้อะไรนะครับ (ถามทุกเรื่อง) ***************

ใช้ rubygems ในการลงแทนครับ

sudo gem install rails -v 1.2.6 ครับ

apirak's picture

มันขึ้น “undefined method `scaffold’ for AdminController:Class” ตอนไหนหรอครับ… ไม่น่ามีคำว่า “scaffold” เหลืออยู่นะครับ

ผมลองใช้คำสั่ง sudo gem install rails -v 1.2.6 ตามที่พี่ Sikachu บอกแล้วครับ

แต่ระบบแจ้งข้อผิดพลาดคือ /usr/bin/gem:23: uninitialized constant Gem::GemRunner (NameError) ครับ

ผมต้องไปแก้ที่ไหนต่อครับ………..

โชคร้ายหน่อย ดูเหมือน rubygem version ใหม่จะมีปัญหา กับ rails 1.2.6
http://groups.google.com/group/rubyonrails-core/browse_thread/thread/d3e...

อันนี้ตอบพี่ apirak นะครับ “undefined method `scaffold’ for AdminController:Class” จะขึ้นตอนที่ผมทดสอบเว็บบราว์เซอร์ด้วย

http://localhost:3000/admin ครับ

apirak's picture

ขอไฟล์ /app/controllers/admins_controller.rb เฉพาะ index ครับ กำลังสงสัยว่า scaffold มาได้อย่างไร

อยากให้ลองเปิด project ใหม่ซิงๆ

$ rails test

$ cd test

$ ./script/generate scaffold admin

… แก้ไขไฟล์ edit database.yml …

$./script/server

เปิด browser

เข้า http://localhost:3000/admins

แบบนี้ถ้ามีปัญหาลองใช้วิธีติดตั้งตามนี้ครับ

วิธีติดตั้ง rails บน linux ubuntu

แปลกดี เพราะถ้า AdminController generate จาก scaffold จริง, มันก็ไม่ควรมีการเรียก scaffold อยู่ข้างใน

แนะนำว่า ควรหา tutorial ที่ support rails version 2.0 มาทำตามจะดีกว่า

ตอบพี่ apirak นะครับ ผมอลงติดตั้ง ruby ใหม่ตางลิงค์ที่พี่ให้มา http://www.codenone.com/node/752

แต่พอทำมาถึงคำสั่ง $sudo ruby serup.rb ในบรรทัดสุดท้ายระบบแจ้งว่า No library stubs found ผมเลยเดาว่า ระบบคงไม่เจอ ตัว rubygems ผมเลยไปติดตั้ง rubygems ผ่าน Synaptic package manage

ต่อจากนั้นผมก็ใช้คำสั่ง $sudo gem update —system

แต่ระบบแจ้ง /usr/bin/gem:23: uninitialized constant Gem::GemRunner (NameError) ครับ งงไปเลยครับ

แล้ว /usr/bin/gem:23: uninitialized constant Gem::GemRunner (NameError) คืออะไรครับ

apirak's picture

บรรทัด setup.rb แล้วเจอ no library… บรรทัดนี้ไ่ม่มีปัญหาเจอเหมือนกัน แต่ของ update นี่ไม่รู้เหมือนกันครับ

ผมว่าลองเอา rubygems ที่ติดตั้งผ่าน synaptic ออกก่อนดีกว่าครับ เพราะว่ามันจะตีกัน (จากที่ผมเคยเจอมา แล้วก็มีคนบ่นเยอะว่าโปรแกรมของ ruby ที่ติดตั้งผ่าน deb ของ ubuntu/debian กับที่ติดตั้งด้วย gems มันตีกัน เพราะว่าโครงสร้าง directory มันไม่ compatible กัน ปกติผมเลยจะลง ruby จากใน synaptic ส่วนที่เหลือเช่น rubygems หรืออะไรพวกนี้ผมก็จะลงแยกเอง เครื่องก็จะเละ ๆ หน่อย)

แล้วติดตั้ง rubygems แยกออกมาเองเลย ไปโหลดตัวติดตั้งมาเองจากเว็บ rubygems เลย มันจะเป็นไฟล์ rubygems-1.xxx.tgz ก็เอามาแตกเอง สั่ง tar -zxvf rubygems-1.xxx.tgz แล้วก็เข้าไปรัน sudo ruby setup.rb เองน่ะครับ

ส่วนตอนลอง rails ผมว่าไม่ต้องไปเปลี่ยน version ไปใช้อันเก่าหรอกครับ หัดอันใหม่ 2.0.2 ไปเลยครับ แล้วก็สั่ง scaffold ยาว ๆ เหมือนที่มีคนบอกไว้ในกระทู้นี้

หรือจะลองไปอ่าน ๆ ที่เค้าคุยกันที่ เว็บของหนังสือ Agile Web Dev with Rails ก็ได้นะครับ เพราะว่าคนเจอปัญหาเดียวกันตอนเปลี่ยน version ของ Rails บานเลย ในนั้นมีคนทำ screencast เอาไว้ด้วยลองไปดูก็ได้ครับ

ขอบคุณครับ เด๋วผมจะลองทำตามพี่ดูนะครับ

ได้ผลอย่างไง ผมจะมาตอบนะครับ

อย่าทิ้งกันนะครับ..

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น