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

สำหรับปัญหาเฉพาะของ Rails เวอร์ชัน 4 หากคำถามของคุณใช้กับ Ruby on Rails โดยทั่วไปให้ใช้แท็ก [ruby-on-rail]

12
Rails Observer Alternatives สำหรับ 4.0
เมื่อผู้สังเกตการณ์ถูกลบอย่างเป็นทางการจาก Rails 4.0ฉันอยากรู้ว่านักพัฒนาคนอื่นกำลังใช้อะไรอยู่ (นอกเหนือจากการใช้อัญมณีที่ถูกแยกออกมา) ในขณะที่ผู้สังเกตการณ์ถูกทารุณกรรมและอาจกลายเป็นเรื่องไม่สะดวกได้อย่างง่ายดายในบางครั้งมีกรณีการใช้งานมากมายนอกเหนือจากการล้างแคชซึ่งเป็นประโยชน์ ยกตัวอย่างเช่นแอปพลิเคชันที่ต้องการติดตามการเปลี่ยนแปลงของโมเดล ผู้สังเกตการณ์สามารถเฝ้าดูการเปลี่ยนแปลงในโมเดล A และบันทึกการเปลี่ยนแปลงเหล่านั้นด้วย Model B ในฐานข้อมูลได้อย่างง่ายดาย หากคุณต้องการดูการเปลี่ยนแปลงในหลายรุ่นผู้สังเกตการณ์คนเดียวก็สามารถจัดการกับมันได้ ใน Rails 4 ฉันอยากรู้ว่านักพัฒนาคนอื่นกำลังใช้กลยุทธ์อะไรในตำแหน่ง Observers เพื่อสร้างฟังก์ชั่นนั้น โดยส่วนตัวแล้วฉันโน้มตัวไปสู่การใช้งาน "ตัวควบคุมไขมัน" ซึ่งการเปลี่ยนแปลงเหล่านี้ถูกติดตามในวิธีการสร้าง / อัพเดต / ลบของตัวควบคุมแต่ละรุ่น ในขณะที่มันขยายพฤติกรรมของแต่ละคอนโทรลเลอร์เล็กน้อย แต่ช่วยในการอ่านและทำความเข้าใจเนื่องจากรหัสทั้งหมดอยู่ในที่เดียว ข้อเสียคือตอนนี้มีรหัสที่คล้ายกันมากกระจายไปทั่วตัวควบคุมหลายตัว การแยกรหัสนั้นออกเป็นวิธีผู้ช่วยเป็นตัวเลือก แต่คุณยังคงทิ้งการเรียกใช้วิธีการเหล่านั้นทิ้งไว้ทุกที่ ไม่ใช่จุดจบของโลก แต่ก็ไม่ได้อยู่ในจิตวิญญาณของ "ผู้ควบคุมผอม" เช่นกัน ActiveRecord callbacks เป็นอีกทางเลือกที่เป็นไปได้แม้ว่าจะมีคนที่ฉันไม่ชอบเป็นการส่วนตัวเพราะมันมีสองรุ่นที่แตกต่างกันมากเกินไปในความคิดของฉัน ดังนั้นใน Rails 4 โลกที่ไม่มีผู้สังเกตการณ์ถ้าคุณต้องสร้างบันทึกใหม่หลังจากสร้าง / อัปเดต / ทำลายบันทึกใหม่อีกชุดหนึ่งคุณจะใช้รูปแบบการออกแบบแบบใด ตัวควบคุมไขมันการเรียกกลับ ActiveRecord หรืออย่างอื่นอย่างสิ้นเชิง? ขอบคุณ.

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 ผู้สังเกตการณ์แบบจำลอง (เพื่อไม่ให้เกิดมลภาวะรหัสควบคุม)

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 …

2
`params.require (: person) .permit (: name,: age)` กำลังทำอะไรอยู่ใน Rails 4?
ตัวอย่างทั้งหมดของพารามิเตอร์ที่แข็งแกร่งใน Rails 4 ใช้เอกสาร params.require(:person).permit(:name, :age) คนได้โปรดแยกแยะและอธิบายสิ่งที่เกิดขึ้นด้วยrequireและpermitที่นี่?

6
ขอบเขตกับแลมบ์ดาและการโต้แย้งในสไตล์ Rails 4 หรือไม่
ฉันสงสัยว่าจะทำสิ่งต่อไปนี้อย่างไรใน Rails 4 หรือถ้าฉันใช้ Rails 3 ในการใช้แลมบ์ดาที่สามารถทะเลาะกันด้วยวิธีเดียวกับ 4 เช่นเดียวกับ 3 ฉันค่อนข้างใหม่กับ Rails 3 และพยายามทำงานกับตัวอย่างบางส่วนที่ใช้งาน Rails 4 นี่คือรหัส Rails 3 ของฉัน: class Person < ActiveRecord::Base scope :find_lazy, lambda {|id| where(:id => id)} end # In console I can call Person.find_lazy(1) ดังนั้นถ้านี่คือ Rails 4 ทางคือใช้ -> {} นั่นคือแลมบ์ดาใช่ไหม? scope :all_lazy, -> { …

4
Rails 4 - พารามิเตอร์ที่แข็งแกร่ง - วัตถุที่ซ้อนกัน
ฉันมีคำถามง่ายๆ แต่ยังไม่พบวิธีแก้ไข ดังนั้นนี่คือสตริง JSON ที่ฉันส่งไปยังเซิร์ฟเวอร์: { "name" : "abc", "groundtruth" : { "type" : "Point", "coordinates" : [ 2.4, 6 ] } } ด้วยวิธีการใช้ใบอนุญาตใหม่ฉันได้รับ: params.require(:measurement).permit(:name, :groundtruth) สิ่งนี้จะไม่มีข้อผิดพลาด แต่รายการฐานข้อมูลที่สร้างขึ้นมีnullแทนค่า groundtruth ถ้าฉันเพิ่งตั้ง: params.require(:measurement).permit! ทุกอย่างได้รับการบันทึกตามที่คาดไว้ แต่แน่นอนว่าความปลอดภัยนี้จะช่วยรักษาความปลอดภัยของพารามิเตอร์ ฉันพบวิธีแก้ปัญหาวิธีอนุญาตให้ใช้อาร์เรย์ แต่ไม่ใช่ตัวอย่างเดียวโดยใช้วัตถุที่ซ้อนกัน สิ่งนี้จะต้องเป็นไปได้เพราะมันควรจะเป็นกรณีการใช้งานที่ค่อนข้างธรรมดา ดังนั้นมันทำงานอย่างไร

6
สำเนาของ xxx ถูกลบออกจากโครงสร้างโมดูล แต่ยังทำงานอยู่
ฉันค่อนข้างมั่นใจว่าข้อผิดพลาดไม่เกี่ยวข้องกับเนื้อหาจริงของTenantIdLoaderโมดูล แต่มันมีบางอย่างที่เกี่ยวข้องกับการActiveSupportพึ่งพา ดูเหมือนว่าฉันจะผ่านข้อผิดพลาดนี้ไม่ได้ จากสิ่งที่ฉันอ่านอาจเป็นเพราะActiveRecord::Baseกำลังโหลดซ้ำหรือCompany::TenantIdLoaderกำลังโหลดซ้ำและมันก็ไม่ได้สื่อถึงสิ่งนั้น ช่วยด้วย! ฉันอยากจะอัปเกรดเป็น Rails 4.2 แก้ไข ตอนนี้ฉันได้เรียนรู้แล้วว่าเป็นเพราะฉันกำลังอ้างอิงTenantซึ่งกำลังโหลดซ้ำโดยอัตโนมัติ ฉันต้องสามารถอ้างอิงชั้นเรียนได้จริงมีใครรู้วิธีแก้ปัญหานี้บ้าง config / application.rb config.autoload_paths += %W( #{config.root}/lib/company ) config / initializers / company.rb ActionMailer::Base.send(:include, Company::TenantIdLoader) lib / บริษัท / tenant_id_loader.rb module Company module TenantIdLoader extend ActiveSupport::Concern included do cattr_accessor :tenant_dependency self.tenant_dependency = {} after_initialize do self.tenant_id = Tenant.active.id if …

3
Rails: ตรวจสอบความเป็นเอกลักษณ์ของสองคอลัมน์ (ร่วมกัน)
ฉันมีReleaseแบบจำลองmediumและcountryคอลัมน์ (อื่น ๆ ) ไม่ควรมีreleasesที่ใช้ร่วมกันmedium/ countryชุดค่าผสมที่เหมือนกัน ฉันจะเขียนสิ่งนี้เป็นการตรวจสอบรางได้อย่างไร

18
ไม่สามารถโหลดไฟล์ดังกล่าวได้ - bundler / setup (LoadError)
ฉันกำลังตั้งค่าแอปพลิเคชัน Rails 4 ด้วย Ruby 2.0 แต่ฉันได้รับ "แอปพลิเคชันเว็บไม่สามารถเริ่มทำงานได้" และได้รับการติดตามนี้: cannot load such file -- bundler/setup (LoadError) /usr/local/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:53:in `require' /usr/local/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:53:in `require' /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/lib/phusion_passenger/loader_shared_helpers.rb:212:in `run_load_path_setup_code' /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:96:in `preload_app' /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:150:in `<module:App>' /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:29:in `<module:PhusionPassenger>' /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:28:in `<main>' apache2.conf ของฉันคือ: LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/buildout/apache2/mod_passenger.so PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19 PassengerDefaultRuby /usr/local/bin/ruby bundle -v คือ: Bundler version 1.3.5 ruby -v คือ: ruby 2.0.0p247 …

6
แอตทริบิวต์ที่ซ้อนกันพารามิเตอร์ที่ไม่อนุญาต
ฉันมีBillวัตถุซึ่งมีDueวัตถุมากมาย วัตถุยังเป็นของDue Personฉันต้องการแบบฟอร์มที่สามารถสร้างBillและลูก ๆDuesทั้งหมดในหน้าเดียว ฉันกำลังพยายามสร้างแบบฟอร์มโดยใช้แอตทริบิวต์ที่ซ้อนกันคล้ายกับในRailscastนี้ รหัสที่เกี่ยวข้องแสดงอยู่ด้านล่าง: due.rb class Due < ActiveRecord::Base belongs_to :person belongs_to :bill end bill.rb class Bill < ActiveRecord::Base has_many :dues, :dependent => :destroy accepts_nested_attributes_for :dues, :allow_destroy => true end bills_controller.rb # GET /bills/new def new @bill = Bill.new 3.times { @bill.dues.build } end ค่าใช้จ่าย / _form.html.erb <%= …

3
เกิดข้อผิดพลาดขณะพยายามโหลดอัญมณี 'uglifier' (Bundler :: GemRequireError)
เหตุใดฉันจึงได้รับข้อผิดพลาดนี้ shibly@mybox:~/blog$ rails server /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:80:in `rescue in block (2 levels) in require': There was an error while trying to load the gem 'uglifier'. (Bundler::GemRequireError) from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:76:in `block (2 levels) in require' from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:72:in `each' from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:72:in `block in require' from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:61:in `each' from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:61:in `require' from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler.rb:99:in `require' from /home/shibly/blog/config/application.rb:7:in …

18
Rails 4: สินทรัพย์ไม่โหลดในการผลิต
ฉันพยายามนำแอปไปใช้งานจริง แต่รูปภาพและเส้นทางเนื้อหา css ไม่ทำงาน นี่คือสิ่งที่ฉันกำลังทำอยู่: เนื้อหารูปภาพอยู่ใน /app/assets/images/image.jpg สไตล์ชีตอยู่ใน /app/assets/stylesheets/style.css ในเลย์เอาต์ของฉันฉันอ้างอิงไฟล์ css ดังนี้: <%= stylesheet_link_tag "styles", media: "all", "data-turbolinks-track" => true %> ก่อนที่จะรีสตาร์ทยูนิคอร์นฉันรันRAILS_ENV=production bundle exec rake assets:precompileและมันก็สำเร็จและฉันเห็นไฟล์ที่มีลายนิ้วมือในpublic/assetsไดเรกทอรี เมื่อฉันเรียกดูไซต์ของฉันฉันได้รับข้อผิดพลาด 404 ไม่พบสำหรับmysite.com/stylesheets/styles.css. ผมทำอะไรผิดหรือเปล่า? อัปเดต: ในเค้าโครงของฉันมีลักษณะดังนี้: <%= stylesheet_link_tag "bootstrap.min", media: "all", "data-turbolinks-track" => true %> <%= stylesheet_link_tag "styles", media: "all", "data-turbolinks-track" => true %> …

8
ปิดใช้งาน ActiveRecord สำหรับ Rails 4
ฉันต้องการปิดใช้งาน ActiveRecord ใน Rails 4 ฉันทำสิ่งต่อไปนี้ใน config/application.rb require File.expand_path('../boot', __FILE__) # require 'rails/all' -- commented require "action_controller/railtie" require "action_mailer/railtie" #require "active_resource/railtie" no need #require "rails/test_unit/railtie" no need #require "sprockets/railtie" no need # Require the gems listed in Gemfile, including any gems # you've limited to :test, :development, or :production. Bundler.require(:default, …

8
ประหยัด enum จากการเลือกใน Rails 4.1
ฉันใช้ enums ใน Rails 4.1 เพื่อติดตามสีของไวน์ Wine.rb class Wine < ActiveRecord::Base enum color: [:red, :white, :sparkling] end ในมุมมองของฉันฉันสร้างสิ่งที่เลือกเพื่อให้ผู้ใช้สามารถเลือกไวน์ที่มีสีที่ต้องการได้ f.input :color, :as => :select, :collection => Wine.colors สิ่งนี้สร้าง HTML ต่อไปนี้: <select id="wine_color" name="wine[color]"> <option value=""></option> <option value="0">red</option> <option value="1">white</option> <option value="2">sparkling</option> </select> '1' is not a valid colorแต่เมื่อส่งแบบฟอร์มที่ผมได้รับข้อผิดพลาดในการโต้แย้งระบุ ผมทราบดีว่านี่เป็นเพราะcolorต้องเท่ากับและไม่ได้1"1" มีวิธีบังคับให้ Rails …

5
รับค่าจำนวนเต็มจาก enum ใน Rails ได้อย่างไร?
ฉันมี enum ใน Model ของฉันที่ตรงกับคอลัมน์ในฐานข้อมูล enumดูเหมือนว่า: enum sale_info: { plan_1: 1, plan_2: 2, plan_3: 3, plan_4: 4, plan_5: 5 } ฉันจะรับค่าจำนวนเต็มได้อย่างไร? ฉันพยายามแล้ว Model.sale_info.to_i แต่จะส่งกลับค่า 0 เท่านั้น

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