Tag: ruby on rails 4

在Ruby on Rails中采取vs首次演出

这是关于ActiveRecord查询方法的问题: first查找第一条记录(如果提供参数,则为前N条记录)。 如果没有定义订单,它将按主键排序。 take给出一条记录(如果提供了参数,则为N条记录),没有任何隐含的顺序。 订单将取决于数据库实施。 如果提供订单,则会受到尊重。 usecase:基于唯一属性从数据库中检索记录,例如。 User.where(email: ‘f@example.com’) 在这里, first生成 SELECT “users”.* FROM “users” WHERE “users”.”email” = ‘f@example.com’ ORDER BY “users”.”id”` ASC LIMIT 1 take生成 SELECT “users”.* FROM “users” WHERE “users”.”email” = ‘f@example.com’ LIMIT 1 因此,如上所述, first添加额外的排序条款。 我想知道take vs first之间是否存在性能差异。 比first take快,反之亦然?

gem测试的策略,以确保gem与Rails 3.x和4.0一起使用?

我已经看到了一些虚拟Rails应用程序的例子(用于测试,因此它们通常在测试或规范下),与Appraisalsgem一起使用,据说可以与Rails 3.x和Rails 4一起使用,但它们看起来很像hackishfunction不全。 这是有点预期的,因为它是一个被剥离的弗兰肯斯坦怪物,试图兼容各种版本的Rails 3以及Rails 4。 我已经提到了试图进行这种测试的项目(截至2013年3月下旬),比如less-rails和ember-rails,但这种用各种版本的Rails测试的方式看起来并不是很干净,而且它是尝试调试非标准的Rails应用程序是非常重要的,特别是在测试版的Rails中。 如果有一个更干净的测试方法,那么你可以通过一些魔法来测试每个Rails应用程序的完整Rails应用程序,通过一些魔法来设置或维护并不困难并且不需要非标准的路径攻击在某些地方等 使用各种版本的Rails(包括至少最新的Rails 3.1.x,3.2.x和4.0.0.beta1)测试gems的可用策略是什么,每种版本的优缺点是什么?

如何在生产轨道中给出指纹css路径4

我正在使用imgkit拍摄我的网页快照。 我跑: RAILS_ENV=production bundle exec rake assets:precompile编译预编译我的资产。 app/assets目录的所有文件都编译为public/assets application.css编译为application-7a23a105125768e41d9d24aee4553615.css 。 我的控制器代码是: kit = IMGKit.new(render_to_string(:partial => ‘form’, :height => 200, :transparent => true, :quality => 10, :layout => false,:locals => {:project => @project})) # t = kit.to_img(:png) kit.stylesheets < “screenshot.png”, :type => “image/png”,:disposition => ‘attachment’,:streaming=> ‘true’) 我不知道如何解决/public/assets/application.css未找到错误… 没有这样的文件或目录 – public / assets / application.css 我正在使用https://github.com/csquared/IMGKit/issues/36获取CSS并在我的快照中工作 编辑 […]

用I18n.t提交按钮助手

我想为提交按钮编写一个帮助程序,它会考虑操作(创建或更新)以获得正确的翻译。 他们来了 : fr: submit: create: user: “Créer mon compte” product: “Déposer l’objet” session: “Se connecter” update: user: “Mettre à jour mon compte” product: “Modifier l’objet” 我试过这个: def submit_button(model) if model == nil I18n.t(‘submit.create.%{model}’) else I18n.t(‘submit.update.%{model}’) end end 但它没有用,rspec发给我的是: Capybara::ElementNotFound: Unable to find button … 我知道这是一个语法问题,但我找不到如何使这项工作……

如何在Ruby on Rails中创建一个catch-all路由?

我希望所有满足特定约束的请求都转到特定的控制器。 所以我需要一条全能的路线。 如何在Rails中指定? 这是这样的吗? match ‘*’, to: ‘subdomain_controller#show’, constraints: {subdomain: /.+\.users/} 这真的会抓住所有可能的路线吗? 即使有许多嵌套目录,重要的是没有任何漏洞。 使用Ruby on Rails 3.2,但准备升级到4.0。 更新 : ‘*path’似乎有效。 但是,我遇到的问题是只要文件存在于我的public目录中,Rails就会呈现它。

Rails – validation:如果一个条件为真

在Rails上5。 我有一个带有description属性的Order模型。 如果满足以下两个条件之一,我只想validation它的存在:如果当前步骤等于第一步或者如果require_validation等于true。 我可以根据这样的条件轻松validation: validates :description, presence: true, if: :first_step? def first_step? current_step == steps.first end 但我不知道如何添加另一个条件并validation其中一个是否属实。 就像是: validates :description, presence: true, if: :first_step? || :require_validation 谢谢!

Rails 4 Net :: SMTPAuthenticationError:535#5.7.0身份validation失败

我正在为我的大学的学生组织建立一个电子邮件列表。 该组织有大约6000名成员,为避免成本我已获得使用学校电子邮件服务器的许可,他们为我创建了一个帐户。 我已经使用我的邮件客户端测试了帐户,一切似乎都运行良好,但是当我尝试通过我的Rails 4应用程序发送时,我收到错误: Net::SMTPAuthenticationError: 535 #5.7.0 Authentication failed 我有这样的配置: application.rb中 config.action_mailer.smtp_settings = { :address => “smtp.school.edu”, :port => 25, :enable_starttls_auto => true, :user_name => “account@school.edu”, :password => “mypassword”, :authentication => ‘login’, :domain => ‘http://myapp.herokuapp.com/’ } 同样,凭据都是正确的,我已经通过我的邮件客户端测试了它,并且还与服务器管理员坐下来确认我的配置中的所有内容在端口和凭据方面都是正确的。 我被告知smtp服务器“对公众开放”,并没有阻止连接,我们检查了他们的日志,他们甚至没有看到尝试从我的应用程序连接。 任何人都有任何线索这里出了什么问题? 是否有一些我不知道的设置可能会关闭?

Rails 4:如何解密rails 4会话cookie(给定会话密钥和秘密)

在Rails 3中,会话cookie可以使用base64解码轻松解码,但在Rails 4中,cookie被编码和加密。 我想知道如何读取编码和加密的rails 4 cookie(假设我们知道密钥库)。 谢谢,

我可以使用Rails在hstore中存储数组

我想保存这样的数据: User.create(name:”Guy”, properties:{url:[“url1″,”url2″,”url3″], street_address:”asdf”}) 我可以在Rails 4中这样做吗? 到目前为止,我尝试过迁移: add_column :users, :properties, :hstore, array: true 但是当我在hstore中保存数组时,它返回错误: PG::InvalidTextRepresentation: ERROR: array value must start with “{” or dimension information

在after_commit,:on =>:create中更新属性时防止无限循环

当我需要在after_commit, :on => :create期间更新属性时,我创建了一个无限回调循环after_commit, :on => :create 。 但是,只有在我需要在此回调期间更新对象的属性时才会发生这种情况。 有办法防止这种情况吗? 我可以以某种方式强制模型重新加载自己,因此它知道它正在执行更新而不是创建吗? class Doc :create … def generate # some logic here that requires this model to be saved in the db self.update_attributes(:filename => filename) # Infinite loop begins here. end end