实体的YAML映射文档似乎缺乏.它没有解释什么是不同的类型,不同的生成器策略,mappedBy意味着什么,允许什么类型的级联值,如何定义多对一关系,以及更多.在哪里可以找到此YAML文件的完整文档?
我正在尝试使用mock_redis gem 为我的 rspec 测试存根 redis 。我的 rspec 配置如下所示:
RSpec.configure do |config|
# ... various rspec config options ...
config.before(:each) do
redis_instance = MockRedis.new
Redis.stub(:new).and_return(redis_instance)
Redis::Store.stub(:new).and_return(redis_instance)
end
end
Run Code Online (Sandbox Code Playgroud)
不幸的是,我仍然看到 get 和 set 被发送到我的实际 redis 实例,如果我杀死 redis,那么我的测试都会失败。我尝试添加断点,并且确实看到此代码块正在正确执行。我还确认,在此before块的范围内,Redis.new == redis_instance和Redis::Store.new == redis_instance都是正确的。
有没有人知道为什么这对我不起作用?我也愿意接受 stubbing/mocking redis 的替代方法。
我有一个UploadActiveModel类,它有一个属性:filename.由于只有一个属性,因此在表单中将该字段留空会导致在我的控制器中使用以下代码时出现错误:
class UploadsController < ApplicationController
def create
@upload = Upload.new(upload_params)
# ...
end
private
def upload_params
params.require(:upload).permit(:filename)
end
end
Run Code Online (Sandbox Code Playgroud)
我提出的最好的解决方法是rescue在upload_params方法中,例如:
def upload_params
params.require(:upload).permit(:filename) rescue ActionController::Parameters.new
end
Run Code Online (Sandbox Code Playgroud)
或者,我想我可以添加一个隐藏字段,以确保该filename字段始终设置为某种东西,无论如何,例如:
= simple_form_for upload do |f|
= f.input :filename, as: :hidden, input_html: { value: '' }
= f.input :filename, as: :file
= f.submit 'Upload'
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来处理用户没有填写任何表单属性?
Android API级别8引入了该Context.getExternalFilesDir()方法,为File特定于您的应用的SD卡路径提供对象引用.我想知道如何模仿这个低至API等级5.
我看到有一种Context.getDir()方法,但我无法从阅读中看出它是如何区别的.
我正在使用Doctrine 1.2和Symfony 1.4.假设我有一个User模型,它有一个Profile.这些定义为:
用户:
轮廓:
我通常会得到这样的数据:
$query = Doctrine_Query::create()
->select('u.id, u.username, p.first_name, p.last_name')
->from('User u')
->leftJoin('Profile p')
->where('u.username = ?', $username);
$result = $query->fetchOne(array(), Doctrine_Core::HYDRATE_ARRAY);
print_r($result);
Run Code Online (Sandbox Code Playgroud)
这将输出如下内容:
Array (
"User" => Array (
"id" => 1,
"username" => "jschmoe"
),
"Profile" => Array (
"first_name" => "Joseph",
"last_name" => "Schmoe"
)
)
Run Code Online (Sandbox Code Playgroud)
但是,我希望用户能够包含"虚拟"列(不确定这是否是正确的术语),以便Profile中的字段实际上看起来像是User的一部分.换句话说,我希望看到的print_r声明看起来更像:
Array (
"User" => Array (
"id" => 1,
"username" => "jschmoe",
"first_name" …Run Code Online (Sandbox Code Playgroud) 我有一个Sidekiq工作者,旨在执行社交活动(例如:像Facebook上的页面).部分原因是需要知道所喜欢对象的URL.
幸运的是,通过Rails.application.routes.url_helpers在任何类或模块中包含对path/url helper方法的访问权限,Rails 3可以轻松访问特定于应用程序的路由.
我遇到的问题是我的Sidekiq工作人员无法访问我的默认网址/端口,尽管在我development.rb或我的工作室中有各种尝试来定义它们production.rb.
class Facebook::LikeRecipeWorker
include Sidekiq::Worker
include Rails.application.routes.url_helpers
sidekiq_options queue: :facebook
def perform(recipe_id, user_id)
recipe = Recipe.find(recipe_id)
user = User.find(user_id)
if user.facebook_token
api = Koala::Facebook::API.new(user.facebook_token)
api.put_connections 'me', 'my_namespace:like', object: recipe_url(recipe)
end
end
end
Run Code Online (Sandbox Code Playgroud)
当recipe_url方法访问时,ArgumentError会引发一条消息:
ArgumentError:缺少要链接的主机!请提供:host参数,设置default_url_options [:host],或将:only_path设置为true
我知道,我可以指定default_url_options为ActionController或ActionMailer在特定的环境配置文件,如:
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config.action_controller.default_url_options = { host: 'localhost', port: 3000 }
Run Code Online (Sandbox Code Playgroud)
然而,这些(理所当然地)似乎对我的Sidekiq工人阶级没有影响.我该如何定义default_url_options这些类?
摩卡提供before,beforeEach,after,和afterEach.我在寻找类似around或aroundEach,但我无法找到关于它的摩卡文档任何东西.
我的用例是我想在数据库事务中包装每个测试,在每个测试运行后执行回滚.我想要做这样的事情:
aroundEach(function (testRunner, done) {
sequelize.transaction().next(function (t) {
testRunner();
t.rollback().done(done);
});
});
Run Code Online (Sandbox Code Playgroud)
作为替代/解决方法,这样的东西作为选项存在(虽然它感觉不太干净):
beforeEach(function (done) {
sequelize.transaction().next((t) => {
this.transaction = t;
done();
});
});
afterEach(function (done) {
this.transaction.rollback().done(done);
});
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 React hooks 来记忆回调。此回调专门使用在对象上定义的函数。
const setValue = useCallback((value) => {
field.setValue(key, value);
}, [field.setValue, key]);
Run Code Online (Sandbox Code Playgroud)
这会触发 Eslint 规则react-hooks/exhaustive-deps。
它想让我进去[field, key]。
如果我将代码更改为以下内容,即使看起来等效,我也不会收到警告:
const { setValue: setFieldValue } = field;
const setValue = useCallback((value) => {
setFieldValue(key, value);
}, [setFieldValue, key]);
Run Code Online (Sandbox Code Playgroud)
为什么 Eslint 在第一个示例中警告我?
在这种情况下我可以安全地忽略它吗?
我第一次尝试使用Doctrine ORM,我正在按照此处的配置进行操作.
执行这些步骤会直接导致以下错误:
警告: class_parents()[function.class-parents]:类MyProject\Model\User不存在,无法 在第222行的/opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php中加载
警告: array_reverse()期望参数1是数组, 在第222行的/opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php中给出布尔值
警告: 在第222行的/opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php中 为foreach()提供的参数无效
致命错误: /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadata.php:67中未捕获的异常'ReflectionException',消息'Class MyProject\Model\User不存在'
堆栈跟踪:
#0 /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadata.php(67):ReflectionClass - > __ construct('MyProject\Model ...')
#1 /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php(350):Doctrine\ORM\Mapping\ClassMetadata - > __ construct('MyProject\Model ...')
#2 /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php(260):Doctrine\ORM\Mapping\ClassMetadataFactory-> newClassMetadataInstance('MyProject\Model ...')
#3 /opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadataFactory.php(169):Doctrine\ORM\Mapping\ClassMetadataFactory-> loadMetadata('MyProject\Model ...')
#4 /opt/local/lib/php/Doctrine/ORM/EntityManager.php(247):Doctrine\ORM\Mapping\ClassMetadataFactory-> getMetadataFor('MyProject\Model ...')
#5 /opt/local/lib/php/Doctrine/ORM/EntityManager.php(563):Doctrine\ORM\EntityManager-> getClassMetadata('MyProject\Model ...')
#6/ 在第67行选择/opt/local/lib/php/Doctrine/ORM/Mapping/ClassMetadata.php
这个错误消失了,如果在示例代码中,我添加了以下行(用下面的注释表示),代码可以正常工作:
$driverImpl = $config->newDefaultAnnotationDriver('/path/to/lib/MyProject/Entities');
$driverImpl->getAllClassNames(); // **MY ADDED LINE**
$config->setMetadataDriverImpl($driverImpl);
Run Code Online (Sandbox Code Playgroud)
没有任何内容提到需要这个调用来使示例代码工作; 这只是我碰巧偶然发现的东西,同时在试图查看错误发生的位置时向屏幕回显一些信息.
是否需要此调用(以及示例代码中未提及的原因)?是否还应该调用其他东西,这是我原始错误的根本原因?
(我可以根据需要发布更多代码,我只是不肯定,因为这是我第一次使用Doctrine,所以最有帮助的是解决这个问题.) …
我正在尝试构建一个ListView,它代表一个食谱列表.我得到了使用a SimpleCursorAdapter来实现这一目标的概念.
但是,除了显示每个项目的配方图像和标题之外,我还想显示与配方相关的逗号分隔的成分串.鉴于游标仅适用于一个表(或视图),我不太清楚如何处理这个问题.
相关表格/栏目如下:
recipes (
_id integer primary key,
name text not null
)
ingredients (
_id integer primary key,
name text not null
)
recipes_ingredients (
_id integer primary key,
recipe_id integer not null,
ingredient_id integer not null
)
Run Code Online (Sandbox Code Playgroud)
编辑:关于这个问题的前两条评论让我相信没有足够的信息可以解释为什么我认为简单的JOIN是不够的.鉴于表结构,配方可以有多种成分,而不仅仅是一种.这意味着如果我尝试为单个食谱执行连接,我将最终得到如下内容:
SELECT r.name AS recipe, i.name AS ingredient
FROM recipes r
INNER JOIN recipes_ingredients ri ON ri.recipe_id=r._id
INNER JOIN ingredients i ON ri.ingredient_id=i._id;
recipe | ingredient
------------------+---------------------
Chocolate Milk | milk
Chocolate Milk | chocolate …Run Code Online (Sandbox Code Playgroud) android ×2
doctrine ×2
doctrine-orm ×2
join ×2
adapter ×1
annotations ×1
callback ×1
cursor ×1
directory ×1
doctrine-1.2 ×1
eslint ×1
filesystems ×1
mocha.js ×1
mocking ×1
orm ×1
php ×1
react-hooks ×1
redis ×1
routing ×1
rspec ×1
sidekiq ×1
stub ×1
symfony1 ×1
usecallback ×1
worker ×1
yaml ×1