Tag: activerecord

使用rails中的复合键更新模型嵌套属性

我有一个具有one_to_many关系的模型: class Work < ActiveRecord::Base has_many :work_right_holders accepts_nested_attributes_for :work_right_holders, allow_destroy: true end class WorkRightHolder < ActiveRecord::Base self.primary_keys = :work_id, :right_holder_id, :role belongs_to :work belongs_to :right_holder end 当我尝试使用嵌套属性更新work时,它会在关系中创建对象的新实例,而不是基于其主键更新现有实例: work.update( {“work_right_holders_attributes”=> { “0”=>{ “role”=>”Author”, “right_holder_id”=>”2”, “work_id”=>work.id, “share”=>”11” } } } ) 为什么会这样?

尝试从连接模型中读取属性时不会出现方法错误

我有项目和用户通过has_many加入:通过称为所有权的连接模型。 每个所有权都有我要访问的owner_type属性。 我想有办法将user_id传递给项目模型,并通过所有权连接模型获取owner_type。 反之亦然我想将project_id传递给用户模型并通过所有权连接模型获取owner_type。 这是我有的: class Project :ownerships validates :name, :presence => true, :length => { :maximum => 50 } def owner_type?(user_id) @user_id = user_id @ownership = self.ownerships.where(:user_id => @user_id) @ownership.owner_type end end class User :ownerships accepts_nested_attributes_for :projects email_regex = /\A[\w+\-.]+@[az\d\-.]+\.[az]+\z/i validates :name, :presence => true, :length => { :maximum => 50 } #validates :email, […]

食谱模型中的成分总和创建购物清单

我有一个购物清单模型,有许多食谱,这也有很多成分。 class Shoppinglist :shoppinglistrecipezations end class Recipe :shoppinglistrecipezations has_many :ingredients, :through => :ingredienzations has_many :ingredienzations end class Ingredient :ingredienzations has_many :ingredienzations end 当我在购物模型中添加几个食谱(其中一些具有相同的成分)时,我想打印购物清单中所有配料的清单和适量的配料。 Shoppinglistingredienzations有一个整数“人”来告诉应该计算多少人服务,而食谱有一个人变量来显示食谱的人数。 Ingredienzations包含数量,测量类型(克,茶匙等)和recipe_id。

每当有人试图批量分配受保护的属性时,都会抛出exception

我正在修复客户端应用程序中的一些批量分配漏洞,我想确保Rails没有默默地丢弃大规模分配受保护属性的尝试。 相反,我想抛出一个exception,所以我可以调查。 即,只要这通常出现在日志中: WARNING: Can’t mass-assign these protected attributes: … 我想抛出exception(或者另外) 编辑:我正在使用Rails 2.3.4

Rails:模型无法保存缓存的列.counts

好吧,这让我非常难过。 我有一个模型PhoneNumbers ,它有一个整数列sent_messages_count 。 我使用后台任务将此列用作计数器缓存,但是,此列的不准确性似乎更为基础。 这是我想做的事情: phone_number.sent_messages_count = phone_number.sent_messages.count 请注意,我将表列设置为关联计数。 下划线与期间。 请参阅我的控制台会话…(我已经做了一些清理工作以使其更简洁)。 # Find the phone number [1] pry(main)> pn = PhoneNumber.find 38 PhoneNumber Load (1.0ms) SELECT “phone_numbers”.* FROM “phone_numbers” WHERE “phone_numbers”.”id” = $1 LIMIT 1 [[“id”, 38]] => # # Change the field to a new value [2] pry(main)> pn.sent_messages_count = 100000 => 100000 […]

Rails 4活动记录validation – 如果存在至少一个属性而有条件地validation4个属性的存在,同时不允许存在

我有一个包含10个属性的表单。 其中我有4个属性,我需要应用我称之为“互为条件存在”的Active Recordvalidation。 我要那个 (A)如果至少存在一个,则必须存在另外3个 (B)仍然不允许存在(如果其他3为空白,则第四个有空白) 以下是四个属性: 地址第一行 邮政编码 州 国家 这意味着如果用户填写其中一个,那么所有其他人必须在场。 但如果一切都是空白的,那没关系。 到目前为止,我只能设法强制执行(A)。 但我未能实施(B)。 实际上,当我尝试在4个属性validation中的一个上使用allow_blank:true时,它会中断(A),因为在此之后,它不能确保如果存在属性,则其他属性也必须如此。 这该怎么做? 这是我目前的代码 规格/型号/用户 validates :address_line_1, presence: true, if: :pa_subelements_mutual_presence? length: { maximum: 100, minimum: 3 } validates :zipcode, presence: true, if: :pa_subelements_mutual_presence?, length: { maximum: 20, minimum: 4} validates :state, presence: true, if: :pa_subelements_mutual_presence?, validates :country, presence: true, if: […]

通过共同的关联数排序,即使没有(轨道)

我正在研究一个与此问题有着非常相似的窘境的项目: 按共同关联数量排序(Rails) 问的提问者(霓虹灯)写道, 背景:我有post和用户,都有很多社区。 目标:对于任何给定的用户,我想返回一组post,按照post与用户共有的社区数量排序(更多社区的post更高) 不幸的是,该解决方案仅包括至少有一个共同社区的post。 我的quandry需要包括按共同社区数量排序的所有post。 扩展目标:结果必须是AREL对象, 所有post按公共社区的数量排序,包括与用户共同拥有零社区的post(共同拥有更多社区的post更高)。

如何使用具有默认排序的依赖destroy子目录销毁ActiveModel实例?

在Rails 4.0中,我有2个ActiveRecord类: class Sequence < ActiveRecord::Base has_many :steps, dependent: :destroy end 和 class Steps { order(‘order ASC’) } end 当我调用mySequence.destroy我收到此错误: PG :: SyntaxError:错误:“order”或其附近的语法错误第1行:…步骤“WHERE”步骤“。”sequence_id“= $ 1 ORDER BY order ASC ^:SELECT”steps“。* FROM”steps“WHERE “steps”。“sequence_id”= $ 1订购ASC 当我删除默认范围时,错误消失了,但我显然必须在我的代码中按顺序排序。 我确实尝试像这样定义关联,并省略default_scope语句: class Sequence < ActiveRecord::Base has_many :steps, dependent: :destroy, order: 'order ASC' end 但它抛出了同样的错误。 还有其他人有这个问题吗? 这是Rails中的错误吗? 我想在孩子们的destroy sql语句中不需要排序。

如果记录与数组中的任何ID具有相同的id,请选择记录

我无法找到正确的语法和运算符来检查记录是否与存储在Array中的任何ID具有相同的ID。 has any? function还是类似? @problem = Remedy.where([“LOWER(\”remedyName\”) LIKE?”, “%#{params[:searchremedy]}%”.downcase]).pluck(:id) @pretreatments = Treatment.joins(:remedies_treatment).where(:remedies_treatment_remedy_id == @problem) 我已将代码更新为: ids = Remedy.where([“LOWER(\”remedyName\”) LIKE?”, “%#{params[:searchremedy]}%”.downcase]).pluck(:id) @pretreatments = Treatment.joins(:remedies_treatments).where(remedies_treatments: { remedy_id: @problem }) 但是我现在得到的错误是: SELECT “treatments”.* FROM “treatments” INNER JOIN “remedies_treatments” ON “remedies_treatments”.”treatment_id” = “treatments”.”id” WHERE “remedies_treatment”.”remedy_id” IS NULL Completed 500 Internal Server Error in 157ms (ActiveRecord: 17.0ms) ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: […]

使用ActiveRecord查询进行百分比计算的难度

我有一个ActiveRecord模式,PurchaseSummary,我inheritance了,我不能改变,看起来像这样: purchase_summaries date date_of_purchase integer number_of_purchases boolean coupon_used 例如,11月1日,有800次购买,500次没有优惠券,300次有优惠券,11月2日,600次购买没有优惠券,100次购买,因此数据库中的行如下所示: 2011-11-01, 500, false 2011-11-01, 300, true 2011-11-02, 600, false 2011-11-02, 100, true 例如,11/1的总购买量为800和11/2 700。 问题:我想构建一个每天返回的查询,使用优惠券的购买百分比,或 2011-11-01, 0.375 2011-11-02, 0.142