小编Dan*_*bio的帖子

around_action回调如何工作?需要解释

我对around_action非常困惑.他们是如何工作的?有人可以向我提供他们如何工作的例子/解释吗?

这是我的敏捷Web开发4书的引用:

回调周围包含了动作的执行.你可以用两种不同的风格来编写回调.在第一个中,回调是一个代码块.在执行操作之前调用该代码.如果回调代码调用yield,则执行该操作.操作完成后,回调代码将继续执行.因此,yield之前的代码就像before action回调,yield之后的代码就是after action回调.如果回调代码从不调用yield.该操作未运行 - 这与之前的操作回调返回false相同.

当我读到这篇文章时,我会得到它.以下是Rails指南中的示例

class ChangesController < ApplicationController
  around_action :wrap_in_transaction, only: :show

  private

  def wrap_in_transaction
    ActiveRecord::Base.transaction do
      begin
        yield
      ensure
        raise ActiveRecord::Rollback
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

那么这里发生了什么?ActiveRecord :: Base.transaction是否作为"before"部分开始,并将ActiveRecord :: Rollback作为"after"部分引发?这种方法屈服于什么?是节目吗?什么会导致yield方法失败导致整个回调失败?这是展示动作的渲染吗?我不明白.请帮忙.

ruby-on-rails callback

21
推荐指数
2
解决办法
1万
查看次数

如何使用Jinja和Flask从我的图像文件夹动态渲染图像?

我正在使用Flask来学习Python并创建一个我想要制作一段时间的玩具应用程序.我遇到了标准文件上传的特定功能问题.我想要做的是尝试根据特定模型从我的图像文件夹动态渲染图像,但我似乎在尝试字符串插值时遇到问题.

这是我的观看代码:

<h1>List of Employees</h1>

{% if employees %}
    {% for employee in employees: %}
      <p>{{ employee.name }}</p>
      <p>{{ employee.title }}</p>
      <p>{{ employee.email }}</p>
      <p>{{ employee.department }}</p>

      # How do I use Jinja and python to interpolate this so I can 
      # grab the correct image
      <img src="static/images/" + {{employee.profile_image }} alt={{ employee.name }} width="120" height="90">{{ employee.profile_image }}</img>
    {% endfor %}
  {% endif %}
Run Code Online (Sandbox Code Playgroud)

它应该非常简单.我被红宝石和铁轨宠坏了......帮助将不胜感激.谢谢.

python flask

10
推荐指数
1
解决办法
2万
查看次数

如何将部分字符串与数据库的对象属性匹配?正则表达式?

我有一个包含电影列表的数据库.典型条目如下所示:

id: 1, 
title: "Manhatten and the Murderer", 
year: 1928, 
synopsis: 'some text...' 
rating: 67, 
genre_id, etc. etc.
Run Code Online (Sandbox Code Playgroud)

现在我试图让一系列搜索测试通过,到目前为止我已经做了一个测试用例传递,如果你在文本字段中输入标题"Manhatten and the Murderer",它将找到你想要的电影.问题在于部分匹配.

现在我想要一种搜索​​"Manhat"并匹配记录"Manhatten and the Murderer"的方法.我也希望它与任何有"Manhat"的电影相匹配.例如,它可能会返回2或3个其他标题:"我在曼哈顿的生活",标题:"曼哈顿的大苹果"等.

下面是我在Movie模型中到目前为止的代码:

def self.search(query)
# Replace this with the appropriate ActiveRecord calls...

if query =~ where(title:)
  #where(title: query)
  binding.pry
end


end
Run Code Online (Sandbox Code Playgroud)

我的问题是,我该如何设置?我的问题是"where(title :)行.一个想法是使用Regexp来匹配title属性.任何帮助将不胜感激!谢谢.

regex database postgresql ruby-on-rails

9
推荐指数
2
解决办法
2万
查看次数

Json -v 1.8.6不会作为capistrano部署的一部分安装

这个问题已经在stackoverflow和其他论坛上被问了几次,但我似乎无法通过我得到的这个错误.当我运行时capistrano production deploy,我将此错误作为部署过程的一部分.

cap production bundler:install
00:00 bundler:install
      01 bundle install --path /var/local/blackduck_flock_rails/shared/bundle --without development test --deployme…
      01 An error occurred while installing json (1.8.6), and Bundler cannot continue.
      01 Make sure that `gem install json -v '1.8.6'` succeeds before bundling.
(Backtrace restricted to imported tasks)
cap aborted!


SSHKit::Runner::ExecuteError: Exception while executing as serv-deployer@oh-utility01.dc1.lan: bundle exit status: 5
bundle stdout: An error occurred while installing json (1.8.6), and Bundler cannot continue.
Make sure that `gem install json -v …
Run Code Online (Sandbox Code Playgroud)

ruby capistrano ruby-on-rails

9
推荐指数
1
解决办法
343
查看次数

如何使此时间断言与时间、日期或日期时间完美匹配

我在测试中有一个断言,如下所示:

assert_equals object.sent_at, Time.now
Run Code Online (Sandbox Code Playgroud)

当我运行这个测试时,我不断收到一个看起来像这样的错误

--- expected +++ actual @@ -1 +1 @@ -Fri, 04 Mar 2016 18:57:47 UTC +00:00 +Fri, 04 Mar 2016

我已经尝试了一些组合来使这个测试通过。

我的实际代码sent_at用 a更新了值,Time.now但它的格式并不完美。它很近,但还不足以通过。我怎样才能让这个测试通过。

以下是我在断言中尝试过的一些组合:

Time.now.utc Date.today Time.now

和很多to_timeto_datetime等等。我怎样才能通过测试?

datetime ruby-on-rails minitest

7
推荐指数
2
解决办法
3380
查看次数

需要的建议:如何正确地将React连接到MongoDB

我花了一些时间学习React,MongoDB和其他JS web app相关工具.对于我创建的一个小项目,我使用此存储库来创建我的玩具应用程序Create React App,没有构建.随着我的应用程序的进展,我事后已经学到了很多与React相关的工具和材料.

我坚持的部分是我正在尝试将联系表单的数据提交到MongoDB,但到目前为止我还没有成功将我的应用程序与MongoDB联系起来.

这是我的MongoDB代码.我已经将MongoDB指南中的代码复制并粘贴到我的Web应用程序中的src/modules/mongo.js文件中

const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
const ObjectId = require('mongodb').ObjectID;
const url = 'mongodb://localhost:27017/danielrubio';

const insertFormData(db, callback) {
   db.collection('contactsubmissions').insertOne( {
      "name": name,
      "message": message,
      "email": email
    }, function(err, result) {
    assert.equal(err, null);
    console.log("Inserted a document into the restaurants collection.");
    callback();
  });
};

MongoClient.connect(url, function(err, db) {
  assert.equal(null, err);
  insertDocument(db, function() {
    db.close();
  });
})
Run Code Online (Sandbox Code Playgroud)

上面的代码很简单,它基本上将一个文档插入到一个集合中.

这是我的第二个文件 src/modules/contact.js

import React, { Component } from 'react';
import Formsy from …
Run Code Online (Sandbox Code Playgroud)

javascript mongodb node.js reactjs

7
推荐指数
1
解决办法
7051
查看次数

对于 Haml,&lt;% debug @variable %&gt; 的等价物是什么?

我有一个令人讨厌的视图问题,我正在尝试调试它,但在 Haml 文档Haml Docs 上没有指定如何调试视图代码。这很烦人,我需要的只是调试一个变量。有人可以帮我解决这个问题吗?谢谢你。

haml ruby-on-rails

6
推荐指数
1
解决办法
5206
查看次数

Ruby - 是找到两个非常大的数组之间差异的有效方法吗?

在找到两个非常大的数组之间的差异时,我遇到了关于效率和算法的问题.我希望对算法有很好理解的人可以指出我如何解决这个问题的正确方向,因为我目前的实现需要花费很长时间.

问题:

我有两个非常大的数组.一个包含具有无效域名的电子邮件列表,另一个是我需要针对第一个阵列检查的混合列表.

accounts_with_failed_email_domains = [279,000 records in here]

unchecked_account_domains = [149,000 records in here]
Run Code Online (Sandbox Code Playgroud)

我需要做的是浏览列表unchecked_account_domains然后比较每个条目,看看是否有匹配accounts_with_failed_email_domains.我需要在列表之间插入所有匹配项,以便稍后处理.

如何有效地编写可以快速检查这些帐户的内容.这是我到目前为止所尝试的.

unchecked_account_domains = [really big array]
unchecked_account_domains = unchecked_account_domains.sort

accounts_with_failed_email_domains = [another huge array].sort

unchecked_account_domains.keep_if do |email|
  accounts_with_failed_email_domains.any? { |failed_email| email == failed_email }
end

# Count to see how many accounts are left
puts unchecked_account_domains.count
Run Code Online (Sandbox Code Playgroud)

以上实现一直在运行.这是第二次尝试,但仍然证明没有更好.

unchecked_account_domains = [really big array]
unchecked_account_domains = unchecked_account_domains.sort

accounts_with_failed_email_domains = [another huge array].sort

unchecked_account_domains.each do |email|
  accounts_with_failed_email_domains.bsearch do |failed_email| 
     final_check << email if …
Run Code Online (Sandbox Code Playgroud)

ruby arrays algorithm

6
推荐指数
2
解决办法
829
查看次数

这段 Ruby 代码是否正确使用了线程、线程池和并发

我现在考虑的是完成 ping 一个非常大的 URL 列表(数量有数千)并检索与其关联的 URL 的 x509 证书的任务的第 3 部分。第 1 部分在这里(如何正确使用线程来 ping URL),第 2 部分在这里(为什么我的连接池不实现我的线程代码)

由于我问了这两个问题,现在我得到了以下代码:

###### This is the code that pings a url and grabs its x509 cert #####

class SslClient
  attr_reader :url, :port, :timeout

  def initialize(url, port = '443')
    @url = url
    @port = port
  end

  def ping_for_certificate_info
    context = OpenSSL::SSL::SSLContext.new
    tcp_client = TCPSocket.new(url, port)
    ssl_client = OpenSSL::SSL::SSLSocket.new tcp_client, context
    ssl_client.hostname = url
    ssl_client.sync_close = true
    ssl_client.connect
    certificate = ssl_client.peer_cert
    verify_result …
Run Code Online (Sandbox Code Playgroud)

ruby concurrency multithreading ruby-on-rails

6
推荐指数
1
解决办法
2014
查看次数

有人可以帮助解释创建类的post_initialize回调(Sandi Metz)

我正在阅读Sandi Metz的POODR,并且遇到了一个我不太了解的编码原理.这是代码:

class Bicycle
 attr_reader :size, :chain, :tire_size

  def initialize(args = {})
    @size = args[:size] || 1
    @chain = args[:chain] || 2
    @tire_size = args[:tire_size] || 3
    post_initialize(args)
  end
end

class MountainBike < Bicycle
  attr_reader :front_shock, :rear_shock

  def post_initialize(args)
    @front_shock = args[:front_shock]
    @rear_shock = args[:rear_shock]
  end
end

mb = MountainBike.new(front_shock: 4, rear_shock: 5)
puts mb.size
puts mb.chain
puts mb.tire_size
puts mb.front_shock
puts mb.rear_shock
Run Code Online (Sandbox Code Playgroud)

此代码将输出1,2,3,4,5其各自的属性.我不明白的是方法查找.

当山地自行车被实例化时,因为它没有自己的initialize方法,它将沿着方法查找链向上移动到它的超类(Bicycle)上.但现在从那里开始,似乎Bicycle再次回到MountainBike的post_initialize方法.它不是继续推进方法链,而是如何回归?是post_initialize一个ruby关键字initialize,因为它提供某种特殊功能?是否有一些其他红宝石内省方法可以用来查看发生了什么?

ruby

5
推荐指数
1
解决办法
338
查看次数