Questions tagged «ruby-on-rails-4»

对于特定于Rails版本4的问题。如果您的问题通常适用于Ruby on Rails,请使用[ruby-on-rails]标签。

12
适用于4.0的Rails Observer替代品
随着Observers正式从Rails 4.0中删除,我很好奇其他开发人员正在使用什么。(除了使用提取的宝石。)虽然观察者当然被滥用并且有时很容易变得笨拙,但除了清除缓存之外,还有许多用例,它们是有益的。 以需要跟踪模型更改的应用程序为例。观察者可以轻松地监视模型A上的更改,并使用模型B将这些更改记录在数据库中。如果要监视多个模型之间的更改,则可以由一个观察员来处理。 在Rails 4中,我很好奇其他开发人员正在使用哪些策略代替Observers重新创建该功能。 就我个人而言,我倾向于一种“胖控制器”实现,其中在每个模型控制器的create / update / delete方法中跟踪这些更改。尽管它稍微使每个控制器的行为slightly肿,但由于所有代码都在一个地方,因此确实有助于提高可读性和理解力。不利的一面是,现在有一些非常相似的代码散布在多个控制器中。将代码提取到帮助器方法中是一种选择,但是您仍然需要在各处随处调用这些方法。不是世界末日,也不是完全符合“瘦控制器”的精神。 ActiveRecord回调是另一种可能的选择,尽管我个人并不喜欢,因为我认为它倾向于将两种不同的模型紧密地结合在一起。 因此,在Rails 4的“无观察员”世界中,如果必须在创建/更新/销毁另一条记录之后创建新记录,那么您将使用哪种设计模式?胖控制器,ActiveRecord回调或其他功能? 谢谢。

7
确定在Rails after_save回调中更改了哪些属性?
我正在模型观察器中设置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 有没有人对处理此问题的最佳方法有任何建议,最好使用模型观察者回调(以免污染我的控制器代码)?

9
Rails 4-Gem :: LoadError:为数据库适配器指定了“ mysql2”,但未加载gem
在我的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 install并且我的Gemfile.lock显示mysql2。 但是,当我运行时,我rake db:migrate在计算机和登台服务器上都收到了此消息: myproject.com(master)$ rake db:migrate WARNING: Use strings for Figaro configuration. …


6
带有lambda和Rails 4风格的参数的范围?
我想知道在Rails 4中如何完成以下操作,或者我是否只是使用Rails 3方法来使用可以传递参数的lambda,而lambda可以像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的使用-> {}的方法,那就是lambda,对不对?scope :all_lazy, -> { select("*") }如果我需要吵架怎么办。我尝试了几种不同的想法,并在使用-> {}时在控制台中出现了参数错误。

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 / company / 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 self.class.tenant_dependent? and self.new_record? and Tenant.active.present? and …

17
无法加载此类文件-捆绑程序/安装程序(LoadError)
我正在用Ruby 2.0设置Rails 4应用程序,但是我得到“无法启动Web应用程序”并得到以下跟踪信息: 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 (2013-06-27 revision 41674) [x86_64-linux] gem env 是: …

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 bills / _form.html.erb <%= form_for(@bill) do |f| %> …

3
尝试加载gem'uglifier'时出错。(捆绑器:: 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 not found错误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 %> <%= javascript_include_tag "application", "data-turbolinks-track" => true %> …

8
禁用ActiveRecord for Rails 4
我想在Rails 4中禁用ActiveRecord。在 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, Rails.env) module MyApp class …

8
从Rails 4.1中的select保存枚举
我使用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将颜色解释为整数而不是字符串?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.