Tag: ruby on rails 3

validation失败时设计自定义消息

我在我的应用程序中使用devise作为身份validation引擎。 当设计validation失败时,有没有办法使用自定义消息。 当密码为空时,Devise为我提供以下消息: Password can’t be blank ,但我需要另一条消息。 我该怎么做?

渴望加载:正确的做事方式

我正在运行Ruby on Rails 3.1。 我阅读了以下关于急切加载的文章和文档,我想找到一个正确的方法来做事: 渴望加载协会 [官方文档] ActiveRecord :: Associations :: ClassMethods (参见“渴望加载关联”一节)[官方文档] 渴望加载 [博客文章] #2说: 请注意,使用Post.includes([:author,:comments])等条件,其中([‘comments.approved =?’,true])。all都会产生意想不到的后果。 #3表示那些意想不到的后果是( 注意 :示例非常相似所以我引用了博客文章的确切文本,但你必须记住解决方法,而不是具体的实现): 此查询,因为它将使用LEFT JOIN,也会丢弃所有post,而不会在其任何评论上添加带有“first”字样的评论。 也就是说,如果存在非“关联”对象,则不会加载“主关联”对象。 当我尝试通过在我之前的问题中 添加诸如.where(:category_relationships => {:user_id => @current_user.id}) 条件来尝试使用预先加载时会发生这种情况,但我不希望这种情况发生。 所以(失败者因为我可能无法在我的情况下使用急切加载,其中条件无法在has_many语句中设置 – 请注意,在上面的代码中, @current_user.id是“动态设置”,与上述网站中的示例不同) , 我想知道是否有pratiques /技术/策略以限制数据库查询,因为我有一个“N + 1问题” 。 也许这些pratiques /技术/策略可以通过使用Ruby on Rails框架来实现…… #1说: 即使Active Record允许您像加入一样指定热切加载关联的条件,但推荐的方法是使用联接。 什么以及如何以正确的方式解决这个问题? 也许解决方案是通过运行特定的和分离的数据库查询来检索和构建自己需要加载的内容,但问题是如何“检索”/“关联”/“插入”那些检索到的“关联”对象到“主要相关的“对象,以便那些可以使用”一个là急切加载“的方式? 也就是说,如何使用@article.comments类的代码(参见上述问题以获取更多信息)并获得我自己急于加载的评论? 在我急切加载之后,是否有可能 / 正确地制作类似@article.comments = […]

Rails:模型与迁移中的validation

可能重复: Ruby on Rails:在模型或数据库中validation是否更好? 我看到可以在Rails模型和迁移中添加相同的约束/validation。 但哪一个是最好的方法? 在模型和数据库级别(以及为什么)进行validation是一种好的做法吗? 或者它们在轨道上相同? 例如,我们可以在模型和迁移中对名称进行相同的validation class User true, :presence => true end class CreateUser true, :null => false end end end

Rails按最常用的标签排序(tag.posts.count)

我想显示所有最常用的邮件标签列表。 我的控制器目前有: @tag_list = Tag.all 我的观点是: () 编辑关系如下: Tag (has_many :posts, :through => :taggings) Tagging(belongs_to :tag and belongs_to :post) Post(has_many :tags, :through => :taggings) 这显示了所有带有计数的标签。 我曾尝试使用Tag.order(..)来玩控制器,但似乎不太好。 任何帮助将非常感激。 谢谢。

自定义错误页面 – Ruby on Rails

我正在尝试在我的网站中设置自定义错误页面。 我遵循PerfectLine Blog的指导原则。 它适用于控制器存在的情况,但id不存在。 例如,我有一个博客控制器,id 4不存在。 它显示自定义错误页面 但在控制器本身不存在的情况下它不存在。 例如,如果我键入一些带有数字ID的随机控制器,则不会被我在应用程序控制器中设置的方法捕获,以重新路由自定义错误页面。 在这种情况下,我得到一个 ActionController::RoutingError (No route matches “/randomcontrollername”): 在终端和rails附带的默认错误页面中。 application_controller.rb class ApplicationController :render_error rescue_from ActiveRecord::RecordNotFound, :with => :render_not_found rescue_from ActionController::RoutingError, :with => :render_not_found rescue_from ActionController::UnknownController, :with => :render_not_found rescue_from ActionController::UnknownAction, :with => :render_not_found end private def render_not_found(exception) render :template => “/error/404.html.erb”, :status => 404 end def render_error(exception) render […]

编辑现有的Rails迁移是个好主意?

在开始一个新项目时,模型中有很多变化,我发现很容易编辑现有的迁移并运行db:clean或db:reset不是创建新的迁移。 当app没有达到生产时我就这样做了,这意味着我可以重置/清理数据库而不用担心,我正在独自工作或者是一个小团队的一部分。 但是今天,我在Rails指南中提到了以下建议,说它不是一个好主意并且不鼓励编辑现有的迁移: 编辑现有迁移并不是一个好主意:如果已在生产计算机上运行现有版本的迁移,您将为自己和同事创建额外的工作并导致严重的麻烦。 相反,您应该编写一个新的迁移来执行您需要的更改。 编辑尚未提交到源代码控制的新生成的迁移(或者更常见的是,尚未在开发计算机之外传播的迁移)相对无害。 我想知道: 我可能遇到什么潜在的陷阱? 这些陷阱是否适用于我的案例(开发阶段,独奏工作)?

Rails3:将范围与OR结合

我需要将名称范围与运算符组合……类似于: class Product < ActiveRecord::Base belongs_to :client scope :name_a, where("products.name = 'a'") scope :client_b, joins(:client).where("clients.name = 'b'") scope :name_a_or_b, name_a.or(client_b) end 谢谢

Rails控制器命名空间

在rails上使用ruby中的命名空间有什么优缺点。 例如:我有很多控制器喜欢 CompanyLocations CompanyXXXX CompanySports CompanyActivites CompanyQQQQQ 我想将所有这些控制器放在Company文件夹中。 什么是铁路最佳做法?

Rails如何在保存后更新列?

我想为我的费率操作创建一个after_save方法。 它会将rating_score / ratings分开并更新列评级。 class KonkurrancersController < ApplicationController def rate @konkurrancer = Konkurrancer.find(params[:id]) @container = "Konkurrancer"+@konkurrancer.id.to_s @konkurrancer.rating_score += params[:vind][:rating].to_i @konkurrancer.ratings += 1 @konkurrancer.save respond_to do |format| format.js end end end 这是我的模特: class Konkurrancer rating) end end 我的rails日志: Started POST “/konkurrancers/rate/46” for 127.0.0.1 at 2011-04-26 23:40:56 +0200 Processing by KonkurrancersController#rate as */* Parameters: {“utf8″=>”Ô£ô”, “authenticity_token”=>”MACFM37hX4S6XA9vryn7gtfl21P vcaPBSiKDI8mfurg=”, […]

Rails 3个额外的会话配置选项(key,expires_after,secure)

有人可以指出新的Rails 3.x会话配置选项是什么? 我正在尝试复制我在Rails 2.3.x应用程序中的相同配置。 这是我在应用程序中使用的配置: #environment.rb config.action_controller.session_store = :active_record_store config.action_controller.session = { :key => ‘_something’, #non-secure for development :secret => ‘really long random string’ } # production.rb – override environment.rb for production config.action_controller.session = { :key => ‘_something_secure’, :secret => ‘really long random string’, :expire_after => 60*60,#time in seconds :secure => true #The session will […]