我对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方法失败导致整个回调失败?这是展示动作的渲染吗?我不明白.请帮忙.
我正在使用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)
它应该非常简单.我被红宝石和铁轨宠坏了......帮助将不胜感激.谢谢.
我有一个包含电影列表的数据库.典型条目如下所示:
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属性.任何帮助将不胜感激!谢谢.
这个问题已经在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) 我在测试中有一个断言,如下所示:
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_time,to_datetime等等。我怎样才能通过测试?
我花了一些时间学习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) 我有一个令人讨厌的视图问题,我正在尝试调试它,但在 Haml 文档Haml Docs 上没有指定如何调试视图代码。这很烦人,我需要的只是调试一个变量。有人可以帮我解决这个问题吗?谢谢你。
在找到两个非常大的数组之间的差异时,我遇到了关于效率和算法的问题.我希望对算法有很好理解的人可以指出我如何解决这个问题的正确方向,因为我目前的实现需要花费很长时间.
问题:
我有两个非常大的数组.一个包含具有无效域名的电子邮件列表,另一个是我需要针对第一个阵列检查的混合列表.
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) 我现在考虑的是完成 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) 我正在阅读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 ×4
algorithm ×1
arrays ×1
callback ×1
capistrano ×1
concurrency ×1
database ×1
datetime ×1
flask ×1
haml ×1
javascript ×1
minitest ×1
mongodb ×1
node.js ×1
postgresql ×1
python ×1
reactjs ×1
regex ×1