草庐IT

create_collection

全部标签

ruby-on-rails - find_or_create_by_id 的最佳方法,但如果找到记录则更新属性

我正在寻找一种干净的方法来创建具有一组属性的记录(如果记录不存在)并且-如果记录存在-更新其属性。我喜欢find_or_create_by_id调用中block的语法。这是我的代码:@categories=Highrise::DealCategory.find(:all)@categories.eachdo|category|puts"Category:#{category.name}"Category.find_or_create_by_id(category.id)do|c|c.name=category.nameendend这里的问题是,如果记录存在但名称已更改,则不会更新。正在

ruby-on-rails - Rails factory_girl create_list 构建同一个对象

我有以下工厂:factory:product,class:ProductdonameFaker::Commerce.product_namedescriptionFaker::Lorem.paragraphpriceFaker::Number.number(3)end当我调用FactoryGirl.create_list(:product,3)时,它会在数据库中插入相同的产品,只是ID不同。我希望每种产品都有不同的名称、描述和价格。你们知道这个问题的解决方案吗?谢谢! 最佳答案 name、description和price被视为静态

ruby - 在迭代器上调用 block 方法 : each. magic.collect { ... }

我有一个带有自定义each-method的类:classCurseArray并且想要调用不同的block方法,如对那些迭代元素的“收集”或“注入(inject)”。例如:curse_array.each_safe.magic.collect{|element|"#{element}isanicesentence."}我知道有一个特定的函数(我在这里称之为“魔法”)可以做到这一点,但我忘记了。请帮忙!:-) 最佳答案 如果一个方法产生了,你需要给它传递一个block。无法定义自动通过自身的block。我能得到的最接近您的规范的是:de

ruby-on-rails - 无法登录用户资源 - devise/sessionsController#create 中的 NoMethod 错误

我在使用Rails3和Devise时遇到了一个特殊问题。我的Rails应用程序有3种用户类型:客户、所有者和管理员routes.rb:devise_for:adminsdevise_for:ownersdevise_for:clientsapplication_controller.rb:defafter_sign_in_path_for(resource)ifresource=="client""/client_accounts/"+current_client.id.to_selsifresource=="admin"stored_location_for(:admins)||"/

ruby-on-rails - rails 4 collection_select 多个嵌套属性未正确保存

我是Rails的新手,我在使用collection_select保存连接表的嵌套属性时遇到了问题。我有模型post、tag和post_tagging。post_tagging是一个连接表。我想为每个帖子设置多个标签,所以我尝试通过collection_select使用多选,但是当我保存时,只有post_id被插入到数据库中。下面是我的代码和日志。后.rbclassPost标签.rbclassTagpost_tagging.rb(我在post_tagging模型中关闭了对tag_id和post_id的存在验证,这样我就可以获得POST的日志。)classPostTaggingposts_

ruby-on-rails - find_or_create_by - 不更新

我想向我的Controller提交一个产品ID和一个零售商ID,如果数据库中存在该组合,我想用提交的参数更新该记录,如果不存在,则创建一个新记录。我的Controller在下面,目前我可以看到,如果组合不存在,则会创建记录,但是当找到组合时,它会执行选择查询并且不会更新记录。我怎样才能让它更新而不只是选择?谢谢Controller:defAddNewPrice@newPrice=ProductPrice.find_or_create_by(product_id:params[:product_id],retailer_id:params[:retailer_id])end更新抱歉..刚

ruby-on-rails - Rails 低级缓存 : Update cache when ActiveRecord object updated_at changes OR when a new object is added to collection

Rails附带片段缓存和低级缓存。片段缓存的工作原理非常清楚:Railswillwriteanewcacheentrywithauniquekey.Ifthevalueofupdated_athaschanged,anewkeywillbegenerated.ThenRailswillwriteanewcachetothatkey,andtheoldcachewrittentotheoldkeywillneverbeusedagain.Thisiscalledkey-basedexpiration.Cachefragmentswillalsobeexpiredwhentheviewfr

ruby: 优化 => phrase.split(delimiter).collect {|p| p.lstrip.rstrip }

ruby:评估结果与with相同的最优化表达式是什么phrase.split(delimiter).collect{|p|p.lstrip.rstrip} 最佳答案 为清晰起见进行了优化我更喜欢以下内容:phrase.split(delimiter).collect(&:strip)但我认为您想要优化速度。我不知道为什么其他人在猜测。唯一找出更快的方法是对代码进行基准测试。确保调整基准参数-这只是一个示例。require"benchmark"#Adjustparametersbelowforyourtypicalusecase.n=

ruby-on-rails - 在给定月份中按天按 `created_at` 获取元素计数

我想为过去一个月在我的应用中创建的用户制作一个简单的图表。基本上就像过去一个月的每一天一样,我想显示当天注册的用户数。到目前为止我所拥有的:#Controller@users=User.count(:order=>'DATE(created_at)DESC',:group=>["DATE(created_at)"])#View#Output2010-01-1022010-01-08112010-01-07232010-01-024没关系,但如果在给定的一天没有创建用户,它应该说“0”而不是根本不存在。如何循环过去30天的每一天并显示当天创建的用户数? 最佳答

ruby-on-rails - find_or_create ActiveRecord::RecordNotUnique 救援重试不起作用

使用ruby​​2.1.2和rails4.1.4。我对数据库中的电子邮件列有唯一约束。如果存在一个线程正在创建用户而另一个线程试图同时创建的竞争条件,则会引发记录不唯一的异常。我正在尝试通过重试来处理此异常,以便在重试时它将在find_or_create的SELECT期间找到客户。然而,它似乎并没有起作用。它用尽重试次数,然后重新引发异常。这是我最初做的:retries=10beginuser=User.find_or_create_by(:email=>email)rescueActiveRecord::RecordNotUniqueretryunless(retries-=1).z