Tag: activemodel

禁止的属性在Rails 4遇到一种情况,在早期版本的Rails中会使用attr_accessible的情况下出现错误

随着最近升级到Rails 4,使用类似下面的代码更新属性不起作用,我得到一个ActiveModel::ForbiddenAttributes错误: @user.update_attributes(params[:user], :as => :admin) 用户在模型中具有以下attr_accessible行: attr_accessible :role_ids, :as =>admin # or any attribute other than :role_ids contained within :user 你如何在Rails 4中完成相同的任务?

部署之后发生ActiveModel :: MissingAttributeError,然后在一段时间后消失

我有一个Rails 3.0.9的应用程序,一旦部署,遭受了一堆的ActiveModel :: MissingAttributeErrors,出现造成500s。 错误发生的相当随机,有时一个页面将加载,其他时间不会,但属性是数据库中的所有现有属性,应该find。 奇怪的是,过了一段时间,错误消失了。 突然之间,他们停止引发一个问题。 我已经search了一个解决scheme,但是这个错误大多发生在有人完成Model.all(:select => 'column_x,column_y')并且正在调用column_z或者他们正在使用cache_money时。 我没有做这些事情。 谁能帮忙?

控制轨道validation的顺序

我有一个轨道模型,有7个数字属性由用户通过表单填写。 我需要validation这些显然易于使用的每个属性的存在 validates :attribute1, :presence => true validates :attribute2, :presence => true # and so on through the attributes 不过,我也需要运行一个自定义的validation器,它需要一些属性,并与他们做一些计算。 如果这些计算的结果不在一定范围内,那么该模型应该被宣布为无效。 就它自己而言,这也很容易 validate :calculations_ok? def calculations_ok? errors[:base] << "Not within required range" unless within_required_range? end def within_required_range? # check the calculations and return true or false here end 然而,问题是方法“validation”总是在方法“validation”之前运行。 这意味着如果用户将其中一个必填字段留空,则rails在尝试使用空属性执行计算时会引发错误。 那么我怎样才能首先检查所有必需属性的存在?

LoadError无法自动加载常量消息

在我的应用程序; 当我提交表单时,我得到这个错误: LoadError at /questions Unable to autoload constant Message, expected /app/models/message.rb to define it 它指向Questions控制器中的create操作: @message = current_user.messages.new(:subject => "You have a question from #{@question.sender_id}"` 留言模式: class Mailboxer::Message < ActiveRecord::Base attr_accessible :notification_id, :receiver_id, :conversation_id end

活动模型,活动logging和活动资源之间的区别

有没有人可以通过定义Active Model,Active Record和Active Resource之间的确切区别来帮助我。 我已经做了足够的search,以find确切的区别,但没有得到任何具体的东西,可以告诉他们之间的确切区别。 现在他们都和我一样。 所以请给我一些具体的答案。

获取ActiveRecord对象中属性的types

我想知道是否有可能通过编程(我知道数据存在于某处)获取types(如AR所知 – 例如在迁移脚本和数据库中)。 例如,我可以处理所有的属性名称: ar.attribute_names.each { |name| puts name } .attributes只是返回名称到它们当前值的映射(例如,如果字段没有设置,则没有types信息)。 一些地方我看到它的types信息: 在脚本/控制台中,键入一个AR实体的名称: >> Driver => Driver(id: integer, name: string, created_at: datetime, updated_at: datetime) 很明显,它知道types。 此外,还有.column_for_attribute,它采用一个attr名称并返回一个列对象 – 它具有埋在底层数据库列对象中的types,但它似乎不是一个干净的方法来获取它。 我也会感兴趣,如果有一种方法是友好的新的“ActiveModel”即将到来(rails3)和数据库的具体解耦(但也许types信息不会是其中的一部分,我似乎无法找出是否是)。 谢谢。

如何确定是否在after_save中创build或更新logging

#new_record? 函数确定是否保存了logging。 但是在after_save钩子里总是假的。 有没有办法确定logging是新创build的logging还是更新的旧logging? 我希望不要使用另一个callback,如before_create在模型中设置标志或需要另一个查询到数据库。 任何意见表示赞赏。 编辑:需要确定它在after_save挂钩,并为我的特定用例,没有updated_at或updated_on时间戳