小编Mat*_*ins的帖子

关于Doctrine ORM的YAML映射的完整文档?

实体的YAML映射文档似乎缺乏.它没有解释什么是不同的类型,不同的生成器策略,mappedBy意味着什么,允许什么类型的级联值,如何定义多对一关系,以及更多.在哪里可以找到此YAML文件的完整文档?

yaml entity-relationship doctrine doctrine-orm

8
推荐指数
1
解决办法
3654
查看次数

无法在 rspec 测试中存根 redis

我正在尝试使用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_instanceRedis::Store.new == redis_instance都是正确的。

有没有人知道为什么这对我不起作用?我也愿意接受 stubbing/mocking redis 的替代方法。

rspec ruby-on-rails mocking stub redis

8
推荐指数
1
解决办法
6575
查看次数

使用StrongParameters处理缺少必需参数的最佳方法?

我有一个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)

我提出的最好的解决方法是rescueupload_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)

有没有更好的方法来处理用户没有填写任何表单属性?

ruby-on-rails strong-parameters ruby-on-rails-4

8
推荐指数
1
解决办法
2701
查看次数

在Android API Level 8之前模仿Context.getExternalFilesDir()?

Android API级别8引入了该Context.getExternalFilesDir()方法,为File特定于您的应用的SD卡路径提供对象引用.我想知道如何模仿这个低至API等级5.

我看到有一种Context.getDir()方法,但我无法从阅读中看出它是如何区别的.

filesystems directory android android-context

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

在Doctrine中将虚拟列添加到当前表?

我正在使用Doctrine 1.2和Symfony 1.4.假设我有一个User模型,它有一个Profile.这些定义为:

用户:

  • ID
  • 用户名
  • 密码
  • created_at
  • 的updated_at

轮廓:

  • ID
  • 用户身份
  • 名字
  • 地址
  • 邮政编码

我通常会得到这样的数据:

$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)

doctrine symfony1 join calculated-columns doctrine-1.2

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

如何为Sidekiq工作者设置default_url_options?

我有一个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_optionsActionControllerActionMailer在特定的环境配置文件,如:

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这些类?

routing ruby-on-rails worker sidekiq

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

如何使用mocha执行`around`或`aroundEach`?

摩卡提供before,beforeEach,after,和afterEach.我在寻找类似aroundaroundEach,但我无法找到关于它的摩卡文档任何东西.

我的用例是我想在数据库事务中包装每个测试,在每个测试运行后执行回滚.我想要做这样的事情:

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)

callback mocha.js

7
推荐指数
0
解决办法
389
查看次数

为什么 `react-hooks/exhaustive-deps` lint 规则会在嵌套对象属性上触发?

我正在尝试使用 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 在第一个示例中警告我?
在这种情况下我可以安全地忽略它吗?

eslint react-hooks usecallback eslint-plugin-react-hooks

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

除非我明确调用AnnotationDriver :: getAllClassNames,否则Doctrine不起作用

我第一次尝试使用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,所以最有帮助的是解决这个问题.) …

php orm annotations doctrine-orm

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

在CursorAdapter中连接多个记录

我正在尝试构建一个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 join cursor adapter android-cursoradapter

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