Tag: rails activerecord

Rails邮件程序存在会话持久性和发送电子邮件的问题

我正在研究Ryan Bates的Railscast#124:Beta邀请。 我已经有了所有的代码,但我还有两个问题。 会话不会通过电子邮件发送过程持续存在。 出于某种原因,当登录用户向朋友发送邀请时,该应用会注销该用户。 签名用户无法发送电子邮件。 我收到有关错误数量的参数的错误消息。 我不认为这两个问题是相关的,但考虑到他们的机会,我想我应该提两个。 有没有人知道为什么我遇到这两个问题? 以登录用户身份发送电子邮件邀请时出现错误消息: ArgumentError in InvitationsController#create wrong number of arguments (0 for 2) Rails.root: /*********/MyApp Application Trace | Framework Trace | Full Trace app/mailers/user_mailer.rb:10:in `invitation’ app/controllers/invitations_controller.rb:16:in `create’ 调节器 class InvitationsController ‘new’ end end end 寄件人/ User_Mailer.rb。 第10行是“def邀请(邀请,signup_path)”。 class UserMailer “********” def registration_confirmation(user) @user = user attachments[“rails.png”] = File.read(“#{Rails.root}/app/assets/images/rails.png”) […]

SQLite3 :: ConstraintException:约束失败:

我正在尝试学习Ruby on Rails并遇到了我需要帮助的问题。 我想要做的是创建一个带有表单的“项目经理”,但是当我填写表单并点击提交时,会显示以下错误: ActiveRecord::StatementInvalid in ProjectsController#create SQLite3::ConstraintException: constraint failed: INSERT INTO “projects” (“created_at”, “description”, “end_date”, “start_date”, “title”, “updated_at”, “user_id”) VALUES (?, ?, ?, ?, ?, ?, ?) Rails.root: /Applications/XAMPP/xamppfiles/htdocs/IDV450-labb1 Application Trace | Framework Trace | Full Trace app/controllers/projects_controller.rb:14:in `create’ 项目管理员: 1. class ProjectsController current_user.id)) 13. 14. if @project.save 15. redirect_to projects_path 16. else 17. […]

在不加载ActiveRecord的情况下测试Rails模块

我正在研究一个Rails应用程序,我正在使用RSpec进行测试。 经过大量等待测试完成之后,我跟随了Gary Bernhardt的建议以及Paul Annesley的这篇信息性post并设置了一个分层spec_helper,我只加载了我绝对需要的Rails部分,以缩短测试时间,并提取function进入我单独测试的单独模块。 这是有道理的。 问题是我有一个模块(扩展ActiveSupport::Concern ),其中包含基于ActiveRecordfunction的实例和类方法,例如绑定到动态查找器,如find_and_create_by_ 。 到目前为止,我已经能够创建一个包含模块和测试的虚拟类,但现在我想将更多逻辑从我的ActiveRecord模型转移到模块中。 具体的例子可能是回调,validation器和方法委托之类的东西,所有这些都与它我正在访问的API有关。 虽然在我的测试中有两个选择,但我现在卡住了: 存根和/或模拟我在模块中调用的每个ActiveRecord方法,这将使测试保持快速但可能使测试代码非常复杂,或者 在测试中需要activerecord,让我的虚拟类inheritance自ActiveRecord::Base并且只测试模块,因为我会测试任何其他的rails模型,这会慢一些但保持测试代码干净。 后一种选择并不真正吸引我,因为我在模块中隔离代码的全部原因是我想将它与Rails分开。 我不是在寻找黑色或白色的答案,但有人会对这种情况有什么建议或最佳实践指示吗? 首先十分感谢!

Rails 3:保存模型的最佳实践

我应该何时将模型保存在导轨中? 谁应该负责调用save,模型本身或调用者? 假设我的用户模型中有(公共)方法,如udpate_points , update_level等。 有两种选择: 模型/方法负责调用save。 所以每个方法self.save调用self.save 。 呼叫者负责呼叫保存。 因此,每个方法只更新属性,但调用者在用户完成后调用user.save 。 权衡是相当明显的:在选项#1中 ,模型保证保存,但我们为每个事务调用save多次。 在选项#2中,我们每个事务只调用一次保存,但调用者必须确保调用save。 例如, team.leader.update_points需要我调用team.leader.save ,这有点不直观。 如果我在同一个模型对象上运行多个方法,这会变得更加复杂。 根据请求添加更具体的信息:更新级别查看用户拥有的点数并更新用户级别。 该函数还调用facebook api通知它用户已达到新的级别,因此我可能会有效地将其作为后台作业执行。

如何故意在Mysql中插入错误编码的字符串?

这可能是我在Stackoverflow中要求的最奇怪的问题之一:) 我有一个遗留的,未经过测试的PHP应用程序,根本无法触及。 此应用程序使用Mysql和每个帐户一个数据库。 所以我们有数以千计的数据库。 由于在我开始处理之前出现了错误,这个应用程序在Mysql中连接了错误的编码。 所以在数据库中,我们应该有“é”,我们实际得到“Ô。 虽然在应用程序中(由于错误的连接编码),我们得到é。 我有一个Rails应用程序来管理帐户/数据库的创建。 问题是Rails应用程序正在使用正确的编码,当它创建数据库时,它将插入一些PHP应用程序无法正确读取的数据。 我的问题:考虑到我在Ruby中有一个字符串“é”,我该如何故意将其改为“é”? 我可以使用的任何string.encode? 注1:我无法转储所有数据库并修复此问题(这将是理想的解决方案) 注意2:我无法切换Rails连接编码,因为它使用另一个具有正确编码的数据库

Rails 4:未定义的方法`primary_key_name’

我使用Rails 4.0.0.beta收到以下错误: NoMethodError: undefined method `primary_key_name’ for #<ActiveRecord::Reflection::AssociationReflection 使用Rails 3.2.x时,我没有得到exception。 我在Rails 3.2.13和Rails 4.0.0.beta上使用Ruby 1.9.3-p194。 问题源于以下has_many声明: class Store :relationships, :source => :user, :conditions => { :relationships => { :description => “Customer” } } do def < “Customer”, :user => user) end end end 我有以下支持课程: class User :relationship end class Relationship < ActiveRecord::Base belongs_to :store belongs_to :user […]

使用Rails 4 Activerecord将多个列计数合并到单个查询中

Rails 4.1,Postgres 9.3,部署到Heroku 我正在尝试减少对数据库的调用次数。 我有一个大表,调查,有多个布尔列,如role_composer , role_performer等。 控制器有多个查询,如 @sample = Survey.where(…whatever…) @Composers = @sample.count(“case when role_composer then true end”) … @Performers = @sample.count(“case when role_performer then true end”) 这样可以正常工作,但会导致对数据库的许多单独查询只有select中的表达式不同。 有没有办法将此构造为一个具有多个聚合/计算列的查询? 我也有使用average()和表达式的查询,但最常见的是count()。 在postgres中,这有效: SELECT count(case when role_composer then true end) as “COMPOSERS”, count(case when role_performer then true end) as “PERFORMERS” from surveys; 使用@sample上的Activerecord方法而不是求助于find_by_sql()的任何方法吗? 我尝试了各种方法但没有成功: .count().count() .select(“count(…) […]

Rails 4 Postgresql数组数据类型:更新值

我刚刚开始在Postgres中使用Rails 4中的数组数据类型,但是我无法在现有数组上获取值以进行更新。 我有一个名为’quantity’的列,它是一个整数数组([0,0])。 我想更新’quantity [0]’的值,我在控制台中尝试了以下内容: a = Asset.find(2) => # a.quantity[0] = 5 => 5 a.quantity_will_change! => [5, 0] a.save => true a.reload => # 如您所见,资产对象的数量值是变化的,但是当我尝试使用“a.save”保存对象时,重新加载对象时不会反映更改。 任何帮助将不胜感激。 谢谢

ActiveRecord布尔validation接受非布尔值

我正在尝试validation属性是否为布尔值,即true或false。 从我预期的Rails指南 validates :new_out_of_stock, inclusion: { in: [true, false] } 工作,但它接受非布尔值(例如“Hi”)作为有效: irb> ip = ItemPrice.new irb> ip.new_out_of_stock = “Hi” => “Hi” irb> ip.valid? => true irb> ip.errors.messages => {} 它正确拒绝nil并接受真假。 我读过的所有Internet上的文档都说这是validation布尔属性的正确方法。 为什么不起作用? 编辑:这是类定义: class ItemPrice < ActiveRecord::Base belongs_to :item, counter_cache: true validates :new_out_of_stock, inclusion: { in: [true, false] } end

优化困难查询(可能带有吱吱声)

有这样的代码(使用PublicActivity gem&Squeel) def index @activities = Activity.limit(20).order { created_at.desc } @one = @activities.where{trackable_type == ‘Post’}.includes(trackable: [:author, :project]) @two = @activities.where{trackable_type == ‘Project’}.includes trackable: [:owner] @activities = @one + @two end 但它创建了8个 SQL请求: SELECT “activities”.* FROM “activities” WHERE “activities”.”trackable_type” = ‘Post’ ORDER BY “activities”.”created_at” DESC LIMIT 20 SELECT “posts”.* FROM “posts” WHERE “posts”.”id” IN (800, 799, […]