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

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

5
ราง 3 ตรวจสอบว่ามีการเปลี่ยนแปลงคุณลักษณะ
ต้องตรวจสอบว่ามีการเปลี่ยนแปลงกลุ่มของคุณลักษณะก่อนที่จะอัพเดทใน Rails 3 ถนน 1, ถนน 2, เมือง, รัฐ, รหัสไปรษณีย์ ฉันรู้ว่าฉันสามารถใช้สิ่งที่ชอบ if @user.street1 != params[:user][:street1] then do something.... end แต่โค้ดนั้นจะยาวมาก ๆ มีวิธีที่สะอาดกว่านี้ไหม?

7
ตรวจสอบว่ามีการเปลี่ยนแปลงคุณสมบัติอะไรบ้างใน Rails after_save callback?
ฉันตั้งค่าการโทรกลับ after_save ในผู้สังเกตการณ์แบบจำลองของฉันเพื่อส่งการแจ้งเตือนเฉพาะเมื่อแอตทริบิวต์ที่เผยแพร่ของโมเดลนั้นเปลี่ยนจาก false เป็น true ตั้งแต่วิธีการเช่นการเปลี่ยนแปลง? มีประโยชน์เฉพาะก่อนที่แบบจำลองจะได้รับการบันทึกวิธีที่ฉันกำลัง (และไม่สำเร็จ) ในขณะนี้ที่พยายามทำมีดังนี้: def before_save(blog) @og_published = blog.published? end def after_save(blog) if @og_published == false and blog.published? == true Notification.send(...) end end ไม่มีใครมีข้อเสนอแนะใด ๆ เกี่ยวกับวิธีที่ดีที่สุดในการจัดการสิ่งนี้โดยเฉพาะอย่างยิ่งการใช้ callbacks ผู้สังเกตการณ์แบบจำลอง (เพื่อไม่ให้เกิดมลภาวะรหัสควบคุม)

6
ข้อผิดพลาด 'รวม' วิธีการที่ไม่ได้กำหนดฟิลด์ Rails Hidden
ฉันอยากทำอะไรแบบนี้กับราง นี่คือสิ่งที่ฉันมีอยู่ในราง: <%= form_for @order do |f| %> <%= f.hidden_field :service, "test" %> <%= f.submit %> <% end %> แต่ฉันได้รับข้อผิดพลาดนี้: undefined method `merge' for "test":String ฉันจะส่งผ่านค่าใน hidden_field ของฉันในรางได้อย่างไร

6
วิธีป้องกันการแคชหน้าเบราว์เซอร์ใน Rails
Ubuntu -> Apache -> Phusion Passenger -> Rails 2.3 ส่วนหลักของเว็บไซต์ของฉันตอบสนองต่อการคลิกของคุณ ดังนั้นหากคุณคลิกที่ลิงค์มันจะส่งคุณไปยังปลายทางและสร้างหน้าเว็บของคุณใหม่ทันที แต่ถ้าคุณกดปุ่มย้อนกลับคุณจะไม่เห็นหน้าใหม่ น่าเสียดายที่มันไม่ปรากฏขึ้นหากไม่มีการรีเฟรชด้วยตนเอง ปรากฏว่าเบราว์เซอร์กำลังแคชอยู่ ฉันต้องการตรวจสอบให้แน่ใจว่าเบราว์เซอร์ไม่ได้แคชหน้า แยกกันผมไม่ต้องการที่จะกำหนดวันหมดอายุไกลในอนาคตสำหรับสินทรัพย์คงที่ของฉันทั้งหมด วิธีที่ดีที่สุดในการแก้ปัญหานี้คืออะไร ฉันควรแก้ปัญหานี้ใน Rails หรือไม่? Apache? Javascript? ขอบคุณสำหรับความช่วยเหลือของคุณ Jason อนิจจา. ข้อเสนอแนะเหล่านี้ไม่ได้บังคับพฤติกรรมที่ฉันกำลังมองหา อาจจะมีคำตอบจาวาสคริปต์? ฉันสามารถมีทางรถไฟเขียนบันทึกเวลาในความคิดเห็นแล้วมีจาวาสคริปต์ตรวจสอบเพื่อดูว่าเวลาภายในห้าวินาที (หรืออะไรก็ได้) ถ้าใช่ก็ไม่เป็นไร แต่ถ้าไม่ใช่จากนั้นโหลดหน้าซ้ำหรือไม่ คุณคิดว่าจะใช้การได้หรือไม่ ขอบคุณสำหรับความช่วยเหลือของคุณ เจสัน

25
บันทึกแบบสุ่มใน ActiveRecord
ฉันต้องการรับการบันทึกแบบสุ่มจากตารางผ่าน ActiveRecord ฉันได้ตามตัวอย่างจากJamis บั๊กจาก 2006 อย่างไรก็ตามฉันได้พบวิธีอื่นผ่านการค้นหาของ Google (ไม่สามารถกำหนดแอตทริบิวต์ด้วยลิงก์เนื่องจากข้อ จำกัด ของผู้ใช้ใหม่): rand_id = rand(Model.count) rand_record = Model.first(:conditions => ["id >= ?", rand_id]) ฉันอยากรู้ว่าคนอื่น ๆ ที่นี่ทำได้อย่างไรหรือถ้าใครรู้ว่าจะมีประสิทธิภาพมากขึ้นอย่างไร

9
Rails 4 - Gem :: LoadError: ระบุ 'mysql2' สำหรับอะแดปเตอร์ฐานข้อมูล แต่ไม่ได้โหลดอัญมณี
ใน gemfile ของฉันฉันมี: gem 'mysql2' database.yml ของฉันเป็นดังนี้: default: &default adapter: mysql2 database: <%= ENV['db_name'] %> username: <%= ENV['db_user'] %> password: <%= ENV['db_pass'] %> host: <%= ENV['db_host'] %> pool: 32 socket: <%= ENV['socket'] %> development: <<: *default production: <<: *default ฉันเรียกใช้ทั้งสองbundle updateและbundle installGemfile.lock ของฉันแสดง mysql2 อย่างไรก็ตามเมื่อฉันเรียกใช้rake db:migrateฉันได้รับสิ่งนี้ทั้งบนคอมพิวเตอร์ของฉันและบนเซิร์ฟเวอร์ staging: myproject.com(master)$ rake db:migrate …

9
การปัดเศษทศนิยมใน Ruby
ฉันมีปัญหาในการปัดเศษ ฉันมีทุ่นซึ่งฉันอยากปัดให้เป็นทศนิยมหนึ่งร้อย อย่างไรก็ตามฉันสามารถใช้.roundซึ่งเปลี่ยนเป็น int เท่านั้นความหมาย2.34.round # => 2. มีวิธีเอฟเฟกต์ง่ายๆที่จะทำบางสิ่งเช่น2.3465 # => 2.35

4
แทนที่เมธอดแอ็ตทริบิวต์ ActiveRecord
ตัวอย่างของสิ่งที่ฉันพูดถึง: class Person < ActiveRecord::Base def name=(name) super(name.capitalize) end def name super().downcase # not sure why you'd do this; this is just an example end end ดูเหมือนว่าจะใช้งานได้ แต่ฉันเพิ่งอ่านหัวข้อเกี่ยวกับวิธีการแทนที่คุณลักษณะในActiveRecord :: Base docsและแนะนำให้ใช้read_attributeและwrite_attributeวิธีการ ฉันคิดว่าต้องมีบางอย่างผิดปกติกับสิ่งที่ฉันทำในตัวอย่างด้านบน มิฉะนั้นเหตุใดพวกเขาจึงอวยพรวิธีเหล่านี้ในฐานะ "วิธีที่ถูกต้อง" เพื่อแทนที่วิธีการของแอตทริบิวต์ พวกเขายังบังคับสำนวนที่ขี้เหร่มากดังนั้นต้องมีเหตุผลที่ดี ... คำถามจริงของฉัน: มีบางอย่างผิดปกติกับตัวอย่างนี้หรือไม่?

5
จะกำหนดประเภทข้อผิดพลาดที่กำหนดเองใน Ruby และ / หรือ Rails ได้ที่ไหน
มีวิธีปฏิบัติที่ดีที่สุดสำหรับการกำหนดประเภทข้อผิดพลาดที่กำหนดเองในแอปพลิเคชัน Ruby library (gem) หรือ Ruby on Rails หรือไม่? โดยเฉพาะ: พวกเขาอยู่ในโครงสร้างในโครงการที่ไหน? ไฟล์แยกต่างหากซึ่งสอดคล้องกับโมดูล / คำจำกัดความของคลาสที่เกี่ยวข้อง จะมีการประชุมใด ๆ ที่สร้างเมื่อไปและเมื่อไม่ได้ที่จะสร้างข้อผิดพลาดชนิดใหม่หรือไม่? ห้องสมุดที่แตกต่างกันมีวิธีการทำสิ่งต่าง ๆ และฉันไม่ได้สังเกตเห็นรูปแบบที่แท้จริง ห้องสมุดบางแห่งมักจะใช้ประเภทข้อผิดพลาดที่กำหนดเองในขณะที่คนอื่นไม่ได้ใช้เลย บางข้อผิดพลาดทั้งหมดมีการขยาย StandardError ขณะที่คนอื่นมีลำดับชั้นซ้อนกัน; บางคำเป็นคำจำกัดความของคลาสที่ว่างเปล่าบางคำอาจมีเล่ห์เหลี่ยมที่ฉลาด โอ้และเพียงเพราะฉันรู้สึกว่าการเรียก "ประเภทข้อผิดพลาด" เหล่านี้เป็นสิ่งที่คลุมเครือสิ่งที่ฉันหมายถึงคือ: class AuthenticationError < StandardError; end class InvalidUsername < AuthenticationError; end

22
บูรณาการอย่างต่อเนื่องสำหรับ Ruby on Rails? [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน6 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันค้นหาโซลูชันการรวมอย่างต่อเนื่องสำหรับ Ruby on Rails แต่ไม่พอใจกับผลลัพธ์มากเกินไป ฉันมาจากร้าน. NET ที่ใช้ CruiseControl.NET และรู้สึกแย่มากกับความสะดวกในการใช้งานและสถานะ / การรายงานที่หลากหลาย เป็นการดีที่ฉันกำลังมองหา: Git / SVN และ Test :: Unit Integration ที่เห็นได้ชัด การรวมเข้ากับ Rake และ / หรือ Capistrano เว็บอินเตอร์เฟสแสดงสถานะของบิลด์ แจ้งเตือนทางอีเมลของการสร้างล้มเหลว การแจ้งเตือนบนเดสก์ท็อป (อาจผ่าน Growl) REST API สำหรับสถานะบิลด์ เฟรมเวิร์กปลั๊กอินสำหรับการเรียกใช้เครื่องมือวิเคราะห์รหัสอื่น ๆ และรายงานผลใน UI


6
Ruby on Rails: ลบคีย์แฮชหลายตัว
ฉันมักจะพบว่าตัวเองเขียนสิ่งนี้: params.delete(:controller) params.delete(:action) params.delete(:other_key) redirect_to my_path(params) เส้นทางแห่งการลบไม่รู้สึกถูกต้องและไม่เป็นเช่นนั้น: [:controller, :action, :other_key].each do |k| params.delete(k) end มีอะไรที่ง่ายและสะอาดกว่านี้ไหม?

6
Rails: จะแสดงรายการตาราง / วัตถุฐานข้อมูลโดยใช้คอนโซล Rails ได้อย่างไร?
ฉันสงสัยว่าคุณสามารถแสดงรายการ / ตรวจสอบฐานข้อมูล / วัตถุใดบ้างที่คุณมีอยู่ในคอนโซล Rails ฉันรู้ว่าคุณสามารถเห็นพวกเขาโดยใช้เครื่องมืออื่น ๆ ฉันแค่อยากรู้ ขอบคุณ

21
ActionController :: InvalidAuthenticityToken
ด้านล่างเป็นข้อผิดพลาดที่เกิดจากแบบฟอร์มในแอปพลิเคชัน Rails ของฉัน: Processing UsersController#update (for **ip** at 2010-07-29 10:52:27) [PUT] Parameters: {"commit"=>"Update", "action"=>"update", "_method"=>"put", "authenticity_token"=>"ysiDvO5s7qhJQrnlSR2+f8jF1gxdB7T9I2ydxpRlSSk=", **more parameters**} ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken): นี้เกิดขึ้นทุกครั้งที่ไม่ได้getแจ้งความประสงค์และที่คุณเห็นauthenticity_tokenจะมี

5
ป้ายกำกับสำหรับปุ่มตัวเลือกในรูปแบบราง
คำถามของฉันคล้ายกับคำถามนี้ แต่สำหรับแอพ Rails ฉันมีแบบฟอร์มที่มีปุ่มตัวเลือกและต้องการเชื่อมโยงป้ายกำกับกับพวกเขา ตัวlabelช่วยสร้างฟอร์มใช้เขตข้อมูลฟอร์มเป็นพารามิเตอร์เท่านั้น แต่ในกรณีนี้ฉันมีปุ่มตัวเลือกหลายปุ่มสำหรับเขตข้อมูลฟอร์มเดียว วิธีเดียวที่ฉันเห็นคือการสร้างป้ายกำกับด้วยตนเองเข้ารหัสรหัสที่สร้างขึ้นโดยอัตโนมัติสำหรับปุ่มตัวเลือก ไม่มีใครรู้วิธีที่ดีกว่าที่จะทำหรือไม่ ตัวอย่างเช่น: <% form_for(@message) do |f| %> <%= label :contactmethod %> <%= f.radio_button :contactmethod, 'email', :checked => true %> Email <%= f.radio_button :contactmethod, 'sms' %> SMS <% end %> สิ่งนี้สร้างสิ่งที่ชอบ: <label for="message_contactmethod">Contactmethod</label> <input checked="checked" id="message_contactmethod_email" name="message[contactmethod]" value="email" type="radio"> Email <input id="message_contactmethod_sms" name="message[contactmethod]" value="sms" …

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