什么是挽救exception并继续处理的正确方法? 我有一个具有文件夹和项目的应用程序,通过名为folders_items的连接表具有habtm关系。 该表具有唯一约束,确保没有重复的项目/文件夹组合。 如果用户尝试多次将项目添加到同一文件夹,我显然不希望添加其他行; 但我也不想停止处理。 当违反唯一约束时,Postgres会自动抛出exception,因此我尝试在控制器中忽略它,如下所示: rescue PG::Error, :with => :do_nothing def do_nothing end 这在单次插入时工作正常。 控制器执行渲染,状态代码为200.但是,我有另一种方法在循环中执行批量插入。 在该方法中,控制器在遇到第一个重复行时退出循环,这不是我想要的。 起初,我认为循环必须包含在正在回滚的事务中,但事实并非如此 – 重复之前的所有行都被插入。 我希望它只是忽略约束exception并移动到下一个项目。 如何防止PG :: Errorexception中断此操作?
我正在使用heroku,并且这样做,我正在经历我的第一次进入postgresql。 也许我在开发过程中从未遇到它,但我无法将条目保存到我的数据库中超过255个字符。 有没有解决的办法? 目前我只是使用字符串来存储消息数据。 其次,如果确实有一种存储超过255个字符的方法,是否有一种很好的方法可以使用迁移将我的消息字符串转换为此forms? 我的应用程序目前正在使用中。 谢谢!
我正在尝试与我的后台任务经理对抗一些种族案件。 基本上,我有一个Thing对象(已经存在)并为其分配一些属性,然后保存它。 使用新属性保存后,我将其排入Resque,并传入ID。 thing = Thing.find(1) puts thing.foo # outputs “old value” thing.foo = “new value” thing.save ThingProcessor.queue_job(thing.id) 后台作业将使用Thing.find(thing_id)从数据库加载对象。 问题是我们发现Resque在获取作业和从ID加载Thing对象方面非常快,它加载了一个陈旧的对象。 因此,在工作中,调用thing.foo仍将返回“旧值”,如1/100次(不是真实数据,但它不会经常发生)。 我们知道这是一个竞赛案例,因为在数据实际提交到数据库之前 ,rails将从thing.save返回(在本例中为postgresql)。 Rails中有一种方法只能在数据库操作提交后执行代码吗? 基本上我想确保在Resque加载对象时,它会得到最新鲜的对象。 我知道这可以使用Thing模型上的after_commit钩子来实现,但我不想在那里。 我只需要在这个特定的上下文中发生这种情况,而不是每次模型都提交更改为DB。
我的googlefu必须是弱的,因为我找不到任何东西来告诉我Rails应用程序中的字符串列的默认限制(在Heroku上托管,使用PostgreSQL作为数据库)。 任何帮助,将不胜感激!
我不得不从rails app上的基于mySql的ruby迁移到使用postgresql。 到目前为止没有问题,我不知道如何解决它。 数据的迁移带来了id,而postgresql现在遇到了现有id的问题:我不清楚它在哪里获得用于确定nextval基数的值:它肯定不是最高值专栏,虽然您可能认为这是一个好主意。 无论如何,它现在与现有的id值冲突。 从标准RoR迁移创建的id列定义为 not null default nextval(‘geopoints_id_seq’::regclass) 是否有一些地方可以将其作为基础使用的价值入侵? 这个问题现在可能出现在20个左右的表中:我可以使用 ‘select max(id) from ‘ 但这似乎使自动增量柱的想法毫无意义。 如何最好地处理?
我有一个配置,除了本地postgresql数据库,我的Rails应用程序还访问远程AWS数据库。 我的问题是,即使在不涉及远程数据库的测试中,应用程序每次都建立与远程数据库的连接,因此我的测试运行起来很懒散。 是否有一种干净的方法来禁用对不需要它的rspec测试的远程数据库服务器的访问? (并为那些需要它的测试启用它?) 我能想到的最好的是将我的rspec测试划分为两个独立的部分 – 那些不需要访问远程数据库和那些部分 – 并使用环境变量来相应地启用或禁用部分config / database.yaml 。 为了清楚起见,我的config/database.yaml文件包含(部分): # file: config/database.yaml # Define connections to the external database remote: adapter: mysql database: remote username: password: host: awsserver-production-mysql.abcdef1234567890.us-west-2.rds.amazonaws.com port: 3306 test: adapter: postgresql encoding: unicode database: MyApp_test pool: 5 username: password: (注意:如果您想知道,使用模拟将无济于事:甚至在测试开始运行之前就建立了远程数据库连接。而vcr只拦截HTTP连接 – 数据库连接使用不同的机制。) 更新 我找到了如何动态建立连接的示例: def connect_to_myapp_database ActiveRecord::Base.establish_connection(:adapter => “mysql”, […]
我正在使用PG数据库运行rails 4.2。 我有一个存储在数据库中的项目,如(model Item ): :something => [“1”, “2”, “3”] 我想得到Item.where(:something.include? => “3”) 显然这不起作用 – 但是你打算如何在rails中做到这一点?
当validation有条件但我的要求已经改变时,我在数据库中的唯一性validation中询问了类似的问题,因此这个问题。 当有多个进程时,在Rails中使用唯一性validation是不安全的,除非在数据库上也强制执行约束(在我的情况下是PostgreSQL数据库,所以请参阅http://robots.thoughtbot.com/the-perils-of-uniqueness-validations )。 在我的例子中,唯一性validation是有条件的:只有在另一个模型上的另一个属性变为真时才应该强制执行。 所以我有 class Parent < ActiveRecord::Base # attribute is_published end class Child < ActiveRecord::Base belongs_to :parent validates_uniqueness_of :text, if: :parent_is_published? def parent_is_published? self.parent.is_published end end 所以模型Child有两个属性: parent_id (与Parent关联)和text (文本属性)。 模型Parent有一个属性: is_published (布尔值)。 如果其parent.is_published为true,则所有类型为Child模型的text应该是唯一的。 使用http://robots.thoughtbot.com/the-perils-of-uniqueness-validations中建议的唯一索引太过限制,因为无论is_published的值如何,它都会强制执行约束。 是否有人知道PostgreSQL数据库上依赖于另一个表的“条件”索引? validation具有条件时,数据库中唯一性validation的解决方案是您的条件取决于同一个表上的属性。 还是另一种解决方法?
我有一个查询我用于搜索:这样的条件: :conditions => [‘family_name LIKE ? OR given_name LIKE ?’, “%#{params[:search]}%”, “%#{params[:search]}%”] 查询在SQLite上本地工作正常,但是当我在PostgreSQL上推送到Heroku时,只有第一个%适用于family_name和given_name。 换句话说,它将匹配出现在单词结尾但不出现在开头或中间的关键字。 示例:现有记录包含:family_name =>“Washington”和:given_name =>“George” 搜索“ington”或“rge”将检索此记录。 搜索“Wash”或“Geo”不会。 我是一个新用户,对于rails来说我是个新手。 在此先感谢您的帮助。 解 相关主题: 1 2 这是我正在使用的修复: :conditions => [‘LOWER(family_name) LIKE ? OR LOWER(given_name) LIKE ?’, “%#{params[:search].downcase}%”, “%#{params[:search].downcase}%”]
我使用hstore与Postgres 9.2和Rails 3.2来存储我的对象,如下所示: class User user_hstore = {:user_id =>”123″, :user_courses => [1,2,3]} end 现在,当我检索user_courses时,我得到一个这样的字符串: ‘[1, 2, 3]’ 如何将此字符串转换为Rails数组? 更好的是,有没有办法在hstore对象中存储数组,以便Rails自动将其作为数组类型检索?