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

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

4
RSpec: คาดว่าจะมีการเปลี่ยนแปลงหลายรายการ
ฉันต้องการตรวจสอบการเปลี่ยนแปลงหลายอย่างในโมเดลเมื่อส่งแบบฟอร์มในคุณสมบัติจำเพาะ ตัวอย่างเช่นฉันต้องการตรวจสอบให้แน่ใจว่าชื่อผู้ใช้เปลี่ยนจาก X เป็น Y และรหัสผ่านที่เข้ารหัสถูกเปลี่ยนด้วยค่าใด ๆ ฉันรู้ว่ามีคำถามบางอย่างเกี่ยวกับเรื่องนี้แล้ว แต่ฉันไม่พบคำตอบที่เหมาะสมสำหรับฉัน คำตอบที่ถูกต้องที่สุดดูเหมือนผู้ChangeMultipleจับคู่โดย Michael Johnston ที่นี่: เป็นไปได้หรือไม่ที่ RSpec จะคาดหวังการเปลี่ยนแปลงในสองตาราง? . ข้อเสียคือตรวจสอบการเปลี่ยนแปลงอย่างชัดเจนจากค่าที่ทราบเป็นค่าที่ทราบเท่านั้น ฉันสร้างรหัสหลอกว่าฉันคิดว่าตัวจับคู่ที่ดีกว่าจะมีลักษณะอย่างไร: expect { click_button 'Save' }.to change_multiple { @user.reload }.with_expectations( name: {from: 'donald', to: 'gustav'}, updated_at: {by: 4}, great_field: {by_at_leaset: 23}, encrypted_password: true, # Must change created_at: false, # Must not change …

8
จะรับโหนดหลักใน Capybara ได้อย่างไร
ฉันกำลังทำงานกับปลั๊กอิน jQuery จำนวนมากซึ่งมักสร้างองค์ประกอบ DOM โดยไม่มี id หรือคุณสมบัติการระบุตัวตนอื่น ๆ และวิธีเดียวที่จะได้รับใน Capybara (ตัวอย่างเช่นการคลิก) - คือการรับเพื่อนบ้าน (ลูกหลานอีกคนของบรรพบุรุษ) ก่อน . แต่ฉันไม่พบที่ไหน Capybara สนับสนุนสิ่งต่างๆเช่น: find('#some_button').parent.fill_in "Name:", :with => name เหรอ?

14
เมื่อใช้ Rails ฉันจะตั้งค่าคีย์หลักไม่ให้เป็นคอลัมน์ที่พิมพ์จำนวนเต็มได้อย่างไร
ฉันใช้การโอนย้าย Rails เพื่อจัดการสคีมาฐานข้อมูลและฉันกำลังสร้างตารางง่ายๆที่ฉันต้องการใช้ค่าที่ไม่ใช่จำนวนเต็มเป็นคีย์หลัก (โดยเฉพาะสตริง) ห่างนามธรรมจากปัญหาของฉันสมมติว่ามีตารางที่พนักงานมีการระบุโดยสตริงและตัวเลขเช่นemployees"134SNW" ฉันได้ลองสร้างตารางในการย้ายข้อมูลดังนี้: create_table :employees, {:primary_key => :emp_id} do |t| t.string :emp_id t.string :first_name t.string :last_name end สิ่งนี้ให้ฉันคือสิ่งที่ดูเหมือนว่ามันไม่สนใจบรรทัดทั้งหมดt.string :emp_idและดำเนินการต่อและทำให้เป็นคอลัมน์จำนวนเต็ม มีวิธีอื่นอีกไหมที่จะทำให้รางสร้างข้อ จำกัด PRIMARY_KEY (ฉันใช้ PostgreSQL) ให้ฉันโดยไม่ต้องเขียน SQL ในการexecuteโทร? หมายเหตุ : ฉันรู้ว่าไม่ควรใช้คอลัมน์สตริงเป็นคีย์หลักดังนั้นโปรดอย่าตอบเพียงแค่บอกว่าให้เพิ่มคีย์หลักจำนวนเต็ม ฉันอาจเพิ่มได้ แต่คำถามนี้ยังใช้ได้

8
การโอนย้ายสำหรับ Java
ฉันใช้ทั้งทับทิมบนรางและ Java ฉันสนุกกับการใช้การโยกย้ายเมื่อฉันทำงานในโครงการราง ดังนั้นฉันจึงสงสัยว่ามีการโยกย้ายเช่นเครื่องมือสำหรับ Java หรือไม่? หากไม่มีเครื่องมือดังกล่าวเป็นความคิดที่ดีที่จะใช้การโอนย้ายเป็นเครื่องมือในการควบคุมฐานข้อมูลที่โปรเจ็กต์ Java ใช้?

13
สตริง "จริง" และ "เท็จ" เป็นบูลีน
ฉันมีแอปพลิเคชัน Rails และฉันใช้ jQuery เพื่อค้นหามุมมองการค้นหาของฉันในพื้นหลัง มีสาขาอยู่q(คำค้นหา) start_date, และend_date ฟิลด์เป็นช่องทำเครื่องหมายและฉันใช้วิธีการในการสร้าง URL ที่ถูกสอบถาม:internalinternalis(:checked) $.getScript(document.URL + "?q=" + $("#search_q").val() + "&start_date=" + $("#search_start_date").val() + "&end_date=" + $("#search_end_date").val() + "&internal=" + $("#search_internal").is(':checked')); ตอนนี้ปัญหาของฉันเกิดขึ้นparams[:internal]เนื่องจากมีสตริงที่ประกอบด้วย "จริง" หรือ "เท็จ" และฉันจำเป็นต้องแคสต์เป็นบูลีน แน่นอนว่าฉันทำได้ดังนี้: def to_boolean(str) return true if str=="true" return false if str=="false" return nil end แต่ฉันคิดว่าต้องมีวิธีที่ Ruby'ish มากกว่านี้ในการจัดการกับปัญหานี้! …

6
จะตรวจจับการเปลี่ยนแปลงแอตทริบิวต์จากโมเดลได้อย่างไร?
ฉันต้องการสร้างฟังก์ชันเรียกกลับในรางที่ดำเนินการหลังจากบันทึกโมเดลแล้ว ฉันมีโมเดลนี้การอ้างสิทธิ์ที่มีแอตทริบิวต์ 'สถานะ' ซึ่งจะเปลี่ยนแปลงไปตามสถานะของการอ้างสิทธิ์ค่าที่เป็นไปได้อยู่ระหว่างดำเนินการรับรองอนุมัติถูกปฏิเสธ ฐานข้อมูลมี 'สถานะ' โดยมีค่าเริ่มต้นเป็น 'รอดำเนินการ' ฉันต้องการทำงานบางอย่างหลังจากสร้างโมเดลในครั้งแรกหรืออัปเดตจากสถานะหนึ่งไปยังอีกสถานะหนึ่งขึ้นอยู่กับว่าจะเปลี่ยนจากสถานะใด ความคิดของฉันคือการมีฟังก์ชันในโมเดล: after_save :check_state def check_state # if status changed from nil to pending (created) do this # if status changed from pending to approved performthistask end คำถามของฉันคือฉันจะตรวจสอบค่าก่อนหน้านี้ก่อนการเปลี่ยนแปลงภายในโมเดลได้อย่างไร

5
ใช้ Rails link_to สำหรับลิงก์ที่โพสต์
ฉันมีลิงค์ที่ต้องส่งคำขอโพสต์ โดยปกติฉันจะใช้ jQuery และป้องกันพฤติกรรมเริ่มต้นของลิงก์จากนั้นส่งแบบฟอร์มไปยังปลายทาง ดูเหมือนว่า Rails น่าจะช่วยฉันได้บ้าง แน่นอนว่าlink_toวิธีนี้มีตัวเลือกสำหรับการระบุวิธีการ POST http: link_to "Profile", 'http://example.com/profile', method: :post ใช้งานได้ แต่ฉันต้องเพิ่มพารามิเตอร์ 2 ตัวด้วย ฉันเหนื่อย: link_to "Profile", 'http://example.com/profile', method: post, param1: 'value1', param2: 'value2' ที่เพิ่งเพิ่มพารามิเตอร์เหล่านั้นลงใน<a>องค์ประกอบ HTML แต่ไม่ได้ส่งพารามิเตอร์เหล่านั้นเมื่อคลิกลิงก์: <a rel="nofollow" param1="value1" param2="value2" data-method="post" href="http://example.com/profile">Profile</a> มีวิธีทำคำขอ POST พร้อมพารามิเตอร์โดยใช้link_toหรือวิธี Rails อื่น ๆ หรือไม่? ฉันใช้ Rails 3.2.9

4
การแปลงการประทับเวลา UTC เป็น ISO 8601 ใน Ruby
ฉันมีการประทับเวลาที่อยู่ใน UTC "2010-10-25 23:48:46 UTC" ฉันต้องการแปลงเป็น ISO 8601 "2010-10-29 06: 09Z" เอกสารนั้นสับสนราวกับนรก - วิธีที่ง่ายที่สุดในการทำเช่นนั้นคืออะไร?

7
จะตรวจสอบได้อย่างไรว่าตัวเลขรวมอยู่ในช่วง (ในคำสั่งเดียว) หรือไม่?
ฉันใช้ Ruby บน Rails 3.0.9 และฉันต้องการตรวจสอบว่ามีตัวเลขรวมอยู่ในช่วงหรือไม่ นั่นคือถ้าฉันมีตัวแปรnumber = 5ฉันต้องการตรวจสอบ1 <= number <= 10และดึงค่าบูลีนหากnumberค่านั้นรวมอยู่ในช่วงนั้น ฉันทำได้ดังนี้: number >= 1 && number <= 10 แต่ฉันอยากจะทำในคำสั่งเดียว ฉันจะทำเช่นนั้นได้อย่างไร?

7
Rails 3: จะ“ redirect_to” ใน Ajax call ได้อย่างไร?
attempt_loginวิธีการต่อไปนี้เรียกว่าโดยใช้ Ajax หลังจากส่งแบบฟอร์มการเข้าสู่ระบบ class AccessController < ApplicationController [...] def attempt_login authorized_user = User.authenticate(params[:username], params[:password]) if authorized_user session[:user_id] = authorized_user.id session[:username] = authorized_user.username flash[:notice] = "Hello #{authorized_user.name}." redirect_to(:controller => 'jobs', :action => 'index') else [...] end end end ปัญหาคือredirect_toไม่ได้ผล คุณจะแก้ปัญหานี้อย่างไร?

4
ฉันจะ "เปิดใช้งาน" อัญมณีเวอร์ชันอื่นได้อย่างไร
ฉันต้องการสลับระหว่างราง 2.3.10 เป็นอัญมณีที่ "ใช้งานอยู่" สำหรับระบบปฏิบัติการของฉันเพื่อที่ฉันจะได้เรียกใช้ที่บรรทัดคำสั่ง เป็นไปได้ไหมที่จะทำเช่นนี้? ฉันไม่ได้ใช้ rvm อาจถึงเวลาเริ่มต้น ฉันพยายามแต่ที่จะทำให้แน่ใจว่ารุ่นของอัญมณีที่มีการติดตั้งก็ไม่ได้ใส่ไว้ในgem install rails --version=2.3.10/usr/bin/rails (ฉันใช้บันเดิลเลอร์สำหรับแอพของฉันอยู่แล้ว - แต่ยังไม่ต้องการการควบคุมอัญมณีที่แม่นยำในระดับ OS จนถึงตอนนี้)

6
Redis และ Memcache หรือแค่ Redis?
ฉันใช้ memcached สำหรับการแคชในแอป Rails 3 ของฉันผ่านRails.cacheอินเทอร์เฟซที่เรียบง่ายและตอนนี้ฉันต้องการประมวลผลงานเบื้องหลังด้วย redis และ resque ฉันคิดว่ามันแตกต่างกันมากพอที่จะรับประกันการใช้ทั้งสองอย่าง แม้ว่าใน heroku จะมีค่าธรรมเนียมแยกต่างหากสำหรับการใช้ทั้ง memcached และ redis มันสมเหตุสมผลหรือไม่ที่จะใช้ทั้งสองอย่างหรือฉันควรย้ายไปใช้ redis เท่านั้น ฉันชอบใช้ memcached ในการแคชเพราะคีย์ที่ใช้น้อยที่สุดจะถูกผลักออกจากแคชโดยอัตโนมัติและฉันไม่ต้องการให้ข้อมูลแคชคงอยู่ Redis ส่วนใหญ่เป็นของใหม่สำหรับฉัน แต่ฉันเข้าใจว่ามันคงอยู่ตามค่าเริ่มต้นและคีย์นั้นจะไม่หมดอายุในแคชโดยอัตโนมัติ แก้ไข: แค่อยากให้คำถามของฉันชัดเจนขึ้น ฉันรู้ว่าเป็นไปได้ที่จะใช้เฉพาะ Redis แทนทั้งสองอย่าง ฉันเดาว่าฉันแค่อยากรู้ว่ามีข้อเสียเฉพาะในการทำเช่นนั้นหรือไม่? เมื่อพิจารณาถึงการใช้งานและโครงสร้างพื้นฐานมีเหตุผลใดบ้างที่ฉันไม่ควรใช้ Redis (กล่าวคือ memcached เร็วขึ้นสำหรับการแคชแบบง่ายหรือไม่) ฉันไม่พบอะไรที่ชัดเจนทั้งสองวิธี

6
ไวยากรณ์ที่จะข้ามการสร้างการทดสอบเนื้อหาและตัวช่วยสำหรับ "รางสร้างตัวควบคุม"?
ฉันอ่านวิธีใช้และลองใช้คำสั่งต่อไปนี้เพื่อข้ามการสร้างการทดสอบเนื้อหาและไฟล์ตัวช่วย $ bin/rails generate controller home index --helper false --assets false --controller-specs false --view-specs false create- app/controllers/home_controller.rb route get "home/index" invoke erb create app/views/home create app/views/home/index.html.erb invoke rspec error false [not found] error false [not found] ดังที่คุณอาจสังเกตเห็นจากผลลัพธ์ด้านบนนี้ใช้งานได้ & เท่านั้นcontroller, routes& viewsถูกสร้างขึ้น แต่สองบรรทัดสุดท้ายน่าสนใจ: error false [not found] error false [not found] …

6
รับคำเตือน "Insecure world writable dir / home / Chance" ใน PATH โหมด 040777 สำหรับรางและอัญมณี
ฉันได้ลองสิ่งนี้แล้วแต่มันไม่ได้ทำงานและดูเหมือนจะเป็น OSX ฉันมีการติดตั้ง Ubuntu 10.10 ใหม่พร้อม rvm, ราง 3 และ Ruby 1.9.2 ฉันมีแอปรางใหม่ แต่การใช้อัญมณีหรือรางทำให้เกิดคำเตือนต่อไปนี้ (มีความล่าช้า) $ ราง -v /home/chance/.rvm/gems/ruby-1.9.2-p180@global/gems/railties-3.0.5/lib/rails/script_rails_loader.rb:11: warning: Insecure world writable dir /home/chance in PATH, mode 040777 /home/chance/.rvm/gems/ruby-1.9.2-p180@global/gems/bundler-1.0.10/lib/bundler/runtime.rb:136: warning: Insecure world writable dir /home/chance in PATH, mode 040777 Rails 3.0.5 $ อัญมณี -v /home/chance/.rvm/rubies/ruby-1.9.2-p180/bin/gem:4: warning: Insecure world writable …
85 ruby-on-rails  ruby  linux  gem  rvm 

6
Rails Paperclip จะลบไฟล์แนบได้อย่างไร?
ฉันใช้Paperclip (w / Amazon s3) บน Rails 3 ฉันต้องการลบไฟล์แนบที่มีอยู่โดยไม่ต้องแทนที่ด้วยการดำเนินการอัปเดต ฉันพบเพียงตัวอย่างเดียวที่นี่และไม่สามารถใช้งานได้มันจะไม่ลบและไม่มีอะไรในบันทึกที่จะบอกว่าทำไม ฉันต้องการทำสิ่งนี้ในแบบฟอร์ม: <%- unless @page.new_record? || !@page.image? -%> <%= f.check_box :image_delete, :label => 'Delete Image' %> <%- end -%> (หน้าคือชื่อของรุ่นรูปภาพคือชื่อแอตทริบิวต์ที่มีไฟล์แนบ) แต่ฉันจะตรวจจับช่องทำเครื่องหมายนั้นได้อย่างไรและที่สำคัญกว่านั้นคือฉันจะลบภาพได้อย่างไร? ขอขอบคุณสำหรับความช่วยเหลือ!

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