Questions tagged «ruby-on-rails»

Ruby on Rails是一个用Ruby编写的开源全栈Web应用程序框架。它遵循流行的MVC框架模型,并以其“配置之上的约定”方法进行应用程序开发而闻名。

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 有没有人对处理此问题的最佳方法有任何建议,最好使用模型观察者回调(以免污染我的控制器代码)?


6
如何防止在Rails中缓存浏览器页面
Ubuntu-> Apache-> Phusion Passenger-> Rails 2.3 我网站的主要部分是对您的点击做出反应。因此,如果您单击链接,它将带您到目的地,并立即重新生成页面。 但是,如果您单击“后退”按钮,则看不到新页面。不幸的是,如果没有手动刷新,它不会显示。看来浏览器正在缓存它。我想确保浏览器没有缓存页面。 另外,我确实想为所有静态资产设置远期到期日期。 解决此问题的最佳方法是什么?我应该在Rails中解决这个问题吗?阿帕奇?Javascript? 谢谢您的帮助,杰森 唉。这些建议都没有强迫我寻找行为。 也许有一个JavaScript答案?我可以让Rails在注释中写出时间戳记,然后让javascript检查一下时间是否在五秒钟之内(或任何可行的方法)。如果是,那么很好,但是如果否,那么重新加载页面吗? 您认为这行得通吗? 感谢你的帮助, 杰森

25
ActiveRecord中的随机记录
我需要通过ActiveRecord从表中获取随机记录。我遵循了2006年Jamis Buck的例子。 但是,我也通过Google搜索遇到了另一种方式(由于新用户的限制,无法通过链接添加属性): rand_id = rand(Model.count) rand_record = Model.first(:conditions => ["id >= ?", rand_id]) 我很好奇这里的其他人是如何做到的,或者是否有人知道哪种方法会更有效。

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. …

9
红宝石中的舍入浮点
我在四舍五入时遇到问题。我有一个浮点数,我想四舍五入到小数点后一位。但是,我只能使用.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_attributeand write_attribute方法。我认为以上示例中的操作一定存在问题;否则,为什么他们会认为这些方法是覆盖属性方法的“正确方法”?他们也强迫使用更丑陋的习惯用法,因此一定有充分的理由... 我真正的问题:这个例子有什么问题吗?

5
在Ruby和/或Rails中的哪里定义自定义错误类型?
是否有在Ruby库(gem)或Ruby on Rails应用程序中定义自定义错误类型的最佳实践?特别: 他们在结构上在哪里属于项目?是否在其他地方插入了一个与相关模块/类定义内联的单独文件? 有没有建立任何时候约定到,当不创建一个新的错误类型? 不同的库有不同的处理方式,我还没有注意到任何实际的模式。有些库始终使用自定义错误类型,而另一些则根本不使用它们。一些具有扩展StandardError的所有错误,而另一些具有嵌套的层次结构;有些只是空的类定义,有些则有各种各样的技巧。 哦,就是因为我觉得称这些“错误类型”有点模棱两可,所以我的意思是: class AuthenticationError < StandardError; end class InvalidUsername < AuthenticationError; end

22
Ruby on Rails的持续集成?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 6年前关闭。 改善这个问题 我一直在寻找Ruby on Rails的持续集成解决方案,但是对结果并不太满意。我来自一家使用CruiseControl.NET的.NET商店,它的易用性和丰富的状态/报告确实让我宠坏了。 理想情况下,我正在寻找: 明显的Git / SVN和Test :: Unit集成 与Rake和/或Capistrano集成 Web界面显示构建状态 电子邮件通知失败的版本。 桌面通知(可能通过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 有没有更简单,更清洁的方法?


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形式的单选按钮标签
我的问题类似于此问题, 但涉及Rails应用程序。 我有一个带有一些单选按钮的表单,并且希望将标签与它们关联。的label形式辅助只需表单字段作为参数,但在这种情况下,我有一个单一的表单字段多个单选按钮。我看到的唯一方法是手动创建标签,对为单选按钮自动生成的ID进行硬编码。有谁知道更好的方法吗? 例如: <% 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" type="radio"> SMS 我想要的是: <input checked="checked" …

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.