คำถามติดแท็ก ruby-on-rails

Ruby on Rails เป็นโอเพ่นซอร์สเฟรมเวิร์กแบบเต็มเว็บแอ็พพลิเคชันที่เขียนใน Ruby มันเป็นไปตามรูปแบบกรอบ MVC ที่เป็นที่นิยมและเป็นที่รู้จักกันดีในเรื่องแนวทาง

4
Rails: dependent =>: destroy VS: dependent =>: delete_all
ในคู่มือรางจะมีคำอธิบายเช่นนี้: วัตถุจะถูกทำลายนอกจากนี้หากพวกเขาเกี่ยวข้อง:dependent => :destroyและถูกลบหากพวกเขาเกี่ยวข้อง:dependent => :delete_all ถูกต้องเท่ห์ แต่อะไรคือความแตกต่างระหว่างการถูกทำลายและการลบ? ฉันลองทั้งคู่แล้วดูเหมือนจะทำแบบเดียวกัน

9
วิธีการแทนที่คีย์แฮชด้วยคีย์อื่น
ฉันมีเงื่อนไขที่ฉันได้รับแฮช hash = {"_id"=>"4de7140772f8be03da000018", .....} และฉันต้องการแฮชนี้เป็น hash = {"id"=>"4de7140772f8be03da000018", ......} PS : ฉันไม่รู้ว่าอะไรคือกุญแจในแฮชพวกมันสุ่มซึ่งมาพร้อมกับคำนำหน้า "_" สำหรับทุกคีย์และฉันไม่ต้องการขีดเส้นใต้

18
execJs: 'ไม่พบ JavaScript runtime' แต่ execjs และ therubyracer อยู่ใน Gemfile
ฉันได้รับข้อผิดพลาดนี้: กวาดล้างคราด! ไม่พบรันไทม์ JavaScript ดูhttps://github.com/sstephenson/execjs , ฉันใช้เวลาค้นหา google ไปหลายชั่วโมงแล้วและฉันยินดีที่จะยอมรับ ฉันเชื่อว่านี่เป็นข้อผิดพลาดของ execJs จากโพสต์ทั้งหมดนี่เป็นปัญหาที่พบได้บ่อยมากกับ Rails 3.1 ตอนนี้จำเป็นต้องใช้รันไทม์ js โดยสิ่งที่เป็นอัญมณีมาตรฐานเช่นสคริปต์กาแฟและ sass กรณีเหล่านี้ส่วนใหญ่ได้รับการแก้ไขโดยการเพิ่มอัญมณี 'execjs' และ 'therubyracer' ลงในแอพ Gemfile แล้วเรียกใช้ 'การอัปเดตชุดข้อมูล' และ / หรือ 'การติดตั้งชุดรวม' แต่ไม่ใช่สำหรับฉัน ฉันเดาว่าฉันโชคดี ฉันใช้งาน Rails 3.1.3 / ruby ​​1.9 บน Redhat Linux 4 รุ่นเก่า (2.6.9-101.ELsmp) และ gcc คือ 3.4.6 รายงานอื่น ๆ …

11
มีสิ่งที่ตรงกันข้ามหรือไม่? สำหรับ Ruby Arrays
ฉันมีตรรกะดังต่อไปนี้ในรหัสของฉัน: if !@players.include?(p.name) ... end @playersเป็นอาร์เรย์ มีวิธีการ!หรือไม่ดังนั้นฉันจึงสามารถหลีกเลี่ยง โดยหลักแล้วตัวอย่างนี้จะเป็น: if @players.does_not_include?(p.name) ... end

4
Rails migrations: เลิกทำการตั้งค่าเริ่มต้นสำหรับคอลัมน์
ฉันมีปัญหาว่าฉันมีการโยกย้ายใน Rails ที่ตั้งค่าการตั้งค่าเริ่มต้นสำหรับคอลัมน์เช่นตัวอย่างนี้: def self.up add_column :column_name, :bought_at, :datetime, :default => Time.now end สมมติว่าฉันต้องการปล่อยการตั้งค่าเริ่มต้นในการโยกย้ายในภายหลังฉันจะทำเช่นนั้นได้อย่างไรโดยใช้การโยกย้ายราง วิธีแก้ปัญหาปัจจุบันของฉันคือการเรียกใช้งานคำสั่ง sql แบบกำหนดเองในการย้ายข้อมูลรางแบบนี้: def self.up execute 'alter table column_name alter bought_at drop default' end แต่ฉันไม่ชอบวิธีการนี้เพราะตอนนี้ฉันขึ้นอยู่กับว่าฐานข้อมูลต้นแบบตีความคำสั่งนี้อย่างไร ในกรณีที่มีการเปลี่ยนแปลงของฐานข้อมูลแบบสอบถามนี้อาจไม่ทำงานอีกต่อไปและการโยกย้ายจะถูกทำลาย ดังนั้นมีวิธีแสดงการยกเลิกการตั้งค่าเริ่มต้นสำหรับคอลัมน์ในรางหรือไม่?


19
ปัญหา Ruby on Rails และ Rake: Rake :: DSL ที่ไม่มีการกำหนดค่าเริ่มต้น
ฉันมีปัญหาที่น่าหงุดหงิดจริงๆ: Rakeกำลังโง่ นี่คือปัญหาที่เกิดขึ้น: $ rails new test_app $ rails generate scaffold new_scaffold field1:string field2:text ทั้งสองทำงานได้ดี แต่เมื่อฉันทำสิ่งนี้ $ rake db:migrate ฉันได้รับข้อผิดพลาดดังต่อไปนี้ (in /home/mikhail/test_app) rake aborted! uninitialized constant Rake::DSL /usr/lib/ruby/1.9.1/rake.rb:2482:in `const_missing' /usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:8:in `<class:TaskLib>' /usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:6:in `<module:Rake>' /usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:3:in `<top (required)>' /usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `require' /usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `<top (required)>' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `require' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `<top (required)>' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `load' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `block …

7
วิธีการเปลี่ยนคอลัมน์ที่ไม่สามารถเปลี่ยนเป็นไม่ได้เป็นโมฆะในการย้ายข้อมูลของ Rails
ฉันสร้างคอลัมน์วันที่ในการโยกย้ายครั้งก่อนและตั้งค่าเป็นโมฆะ ตอนนี้ฉันต้องการเปลี่ยนให้ไม่ใช่โมฆะ ฉันจะทำสิ่งนี้โดยสมมติว่ามีแถว null ในฐานข้อมูลนั้นได้อย่างไร ฉันตกลงกับการตั้งค่าคอลัมน์เหล่านั้นเป็น Time.now หากพวกเขาเป็นโมฆะในขณะนี้

7
จะเปลี่ยนเส้นทางไปยังหน้าก่อนหน้าใน Ruby On Rails ได้อย่างไร
ฉันมีหน้าเว็บที่แสดงรายการโครงการทั้งหมดที่มีส่วนหัวและการจัดเรียงที่สามารถจัดเรียงได้ path: /projects?order=asc&page=3&sort=code ฉันเลือกที่จะแก้ไขหนึ่งในโครงการ path: projects/436/edit เมื่อฉันคลิกบันทึกในหน้านั้นมันจะเรียกวิธีการควบคุม / ปรับปรุงโครงการ หลังจากฉันอัปเดตรหัสฉันต้องการเปลี่ยนเส้นทางไปยังเส้นทางที่ฉันเปิดก่อนที่ฉันจะคลิกแก้ไขโครงการเฉพาะ กล่าวอีกนัยหนึ่งฉันต้องการที่จะอยู่ในหน้าเดียวกันกับการเรียงลำดับเดียวกัน ฉันเห็น link_to (: back) และคิดว่า: back อาจใช้งานใน redirect_to (: back) ได้ แต่นั่นก็ไม่เป็นเช่นนั้น puts YAML::dump(:back) yields the following: :back ความคิดเห็นใด ๆ เกี่ยวกับวิธีที่ฉันสามารถทำให้สิ่งนี้ทำงานได้ ดูเหมือนว่าปัญหาจะแก้ไขได้ง่าย แต่ฉันใหม่กับ RoR

5
Rails มี _many พร้อมชื่อแทน
ในรุ่นผู้ใช้ของฉันฉันสามารถมี: has_many :tasks และในรูปแบบงานของฉัน: belongs_to :user จากนั้นหากว่าคีย์ต่างประเทศ 'user_id' ถูกเก็บไว้ในตารางงานฉันสามารถใช้: @user.tasks คำถามของฉันคือฉันจะประกาศความสัมพันธ์ has_many ได้อย่างไรซึ่งฉันสามารถอ้างถึงงานของผู้ใช้เป็น: @user.jobs ... หรือ ... @user.foobars ขอบคุณมาก

14
AWS S3: ที่ฝากข้อมูลที่คุณพยายามเข้าถึงต้องได้รับการแก้ไขโดยใช้จุดสิ้นสุดที่ระบุ
ฉันพยายามลบไฟล์ภาพที่อัพโหลดด้วยอัญมณี Ruby AWS-SDK-Core ฉันมีรหัสต่อไปนี้: require 'aws-sdk-core' def pull_picture(picture) Aws.config = { :access_key_id => ENV["AWS_ACCESS_KEY_ID"], :secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"], :region => 'us-west-2' } s3 = Aws::S3::Client.new test = s3.get_object( :bucket => ENV["AWS_S3_BUCKET"], :key => picture.image_url.split('/')[-2], ) end อย่างไรก็ตามฉันได้รับข้อผิดพลาดต่อไปนี้: ที่ฝากข้อมูลที่คุณพยายามเข้าถึงต้องได้รับการแก้ไขด้วยจุดสิ้นสุดที่ระบุ กรุณาส่งคำขอในอนาคตทั้งหมดไปยังจุดสิ้นสุดนี้ ฉันรู้ว่าภูมิภาคนั้นถูกต้องเพราะถ้าฉันเปลี่ยนus-east-1เป็นข้อผิดพลาดต่อไปนี้จะปรากฏขึ้น: คีย์ที่ระบุไม่มีอยู่ ฉันทำอะไรผิดที่นี่

7
config.assets.compile = true ในการผลิต Rails ทำไมต้องเป็นเช่นนั้น?
เริ่มต้น Rails ติดตั้งแอปโดยrails newมีconfig.assets.compile = falseในการผลิต และวิธีการทั่วไปในการทำสิ่งต่าง ๆ คือการเรียกใช้rake assets:precompileก่อนที่จะปรับใช้แอปของคุณเพื่อให้แน่ใจว่ามีการรวบรวมสินทรัพย์ไปป์ไลน์ของสินทรัพย์ทั้งหมด แล้วจะเกิดอะไรขึ้นถ้าฉันเริ่มconfig.assets.compile = trueผลิต ฉันจะไม่ต้องวิ่งprecompileอีกต่อไป สิ่งที่ฉันเชื่อว่าจะเกิดขึ้นเป็นครั้งแรกที่มีการร้องขอเนื้อหาจะถูกรวบรวม นี่จะเป็นผลงานที่ยอดเยี่ยมในครั้งแรก (และหมายความว่าโดยทั่วไปคุณต้องใช้ js runtime ในการผลิตเพื่อดำเนินการ) แต่นอกเหนือจากข้อเสียเหล่านี้หลังจากที่รวบรวมเนื้อหาอย่างเกียจคร้านฉันคิดว่าการเข้าถึงเนื้อหานั้นในภายหลังจะไม่มีผลกระทบต่อประสิทธิภาพการทำงานของแอปจะเหมือนกับประสิทธิภาพของสินทรัพย์ก่อนคอมไพล์หลังจากการคอมไพล์ครั้งแรกในครั้งแรก จริงหรือ มีอะไรฉันหายไปไหม มีเหตุผลอื่นใดที่จะไม่ตั้งconfig.assets.compile = trueในการผลิต? ถ้าฉันใช้งานจริงในการผลิต JS และยินดีที่จะแลกเปลี่ยนประสิทธิภาพที่ลดลงสำหรับการเข้าถึงสินทรัพย์ครั้งแรกเพื่อเป็นการตอบแทนที่ไม่ต้องทำงานprecompileสิ่งนี้สมเหตุสมผลหรือไม่

3
Ruby on Rails Callback ความแตกต่างระหว่าง: before_save และ: before_create คืออะไร
คุณช่วยอธิบายรายละเอียดเกี่ยวกับการเรียกกลับ:before_saveและ:before_createRuby on Rails ได้อย่างไรและพวกเขาต้องทำอย่างไรกับการตรวจสอบความถูกต้องของ Rails? การตรวจสอบเกิดขึ้นหลังจาก:before_saveหรือ:before_createไม่?

5
วิธีที่ถูกต้องในการแทนที่เมธอด setter ใน Ruby on Rails คืออะไร?
ฉันใช้ Ruby on Rails 3.2.2 และฉันต้องการทราบว่าต่อไปนี้เป็นวิธี "ถูกต้อง" / "ถูกต้อง" / "แน่ใจ" เพื่อแทนที่เมธอด setter สำหรับแอตทริบิวต์ class ของฉัน attr_accessible :attribute_name def attribute_name=(value) ... # Some custom operation. self[:attribute_name] = value end รหัสข้างต้นดูเหมือนว่าจะทำงานตามที่คาดไว้ แต่ผมอยากจะทราบว่าโดยการใช้รหัสดังกล่าวในอนาคตผมจะมีปัญหาหรืออย่างน้อยสิ่งที่เป็นปัญหา "ผมควรคาดหวัง" / "ที่อาจเกิดขึ้น" กับ Ruby on Rails หากนั่นไม่ใช่วิธีที่ถูกต้องในการแทนที่เมธอด setter วิธีที่ถูกต้องคืออะไร หมายเหตุ : ถ้าฉันใช้รหัส attr_accessible :attribute_name def attribute_name=(value) ... # …

16
เกิดข้อผิดพลาดในการติดตั้ง libv8: ข้อผิดพลาด: ไม่สามารถสร้างส่วนขยายดั้งเดิมของ gem
ฉันทำโครงการรางด้วย rails new test_bootstrap. ที่ประสบความสำเร็จ. ย้ายไปยังโปรเจ็กต์ dir และเพิ่มพลอย gem "therubyracer" gem "less-rails" #Sprockets (what Rails 3.1 uses for its asset pipeline) supports LESS gem "twitter-bootstrap-rails" และเรียกใช้ bundle install หลังจากนั้นฉันมีข้อผิดพลาดนี้ Installing libv8 (3.16.14.3) Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. c:/RailsInstaller/Ruby1.9.3/bin/ruby.exe extconf.rb creating Makefile 지정된 경로를 찾을 수 없습니다. 지정된 …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.