小编bdw*_*ain的帖子

shoulda匹配器应该validate_uniqueness_of与范围失败

我有3个型号,用户,游戏和播放器.用户和游戏之间基本上存在多对多的关系,玩家作为联接表,除了玩家有其他信息,因此它有自己的模型.

玩家需要游戏ID和用户ID的唯一组合,所以我试着在玩家中说:

validates_uniqueness_of :user_id, :scope => :game_id
Run Code Online (Sandbox Code Playgroud)

然后在我的规范中,我说(使用shoulda matchers):

it { should validate_uniqueness_of(:user_id).scoped_to(:game_id)}
Run Code Online (Sandbox Code Playgroud)

以下是玩家定义的关系:

belongs_to :game, :inverse_of => :players
belongs_to :user, :inverse_of => :players
Run Code Online (Sandbox Code Playgroud)

但我在该规范上得到一个ActiveRecord :: statementinvalid错误

ActiveRecord::StatementInvalid: Mysql2::Error: Column 'game_id' cannot be null: INSERT INTO `players` ETC...
Run Code Online (Sandbox Code Playgroud)

知道出了什么问题吗?

rspec ruby-on-rails shoulda

11
推荐指数
2
解决办法
4543
查看次数

带有ActiveRecord的rails 3中inverse_of的限制是什么

我一直在阅读有关inverse_of的内容,我在网上看到的所有内容似乎都不一致,让我感到困惑.如果你看这里,你可以看到

inverse_of支持有一些限制:

  • 它们不适用于:通过协会.
  • 它们不兼容:多态关联.
  • 它们不适用于:作为协会.
  • 对于belongs_to关联,忽略has_many反向关联.

但就在上面,他们给出了这个例子

class Customer < ActiveRecord::Base
   has_many :orders, :inverse_of => :customer
end

class Order < ActiveRecord::Base
   belongs_to :customer, :inverse_of => :orders
end
Run Code Online (Sandbox Code Playgroud)

我认为他们说的是第一个反向无效,但是如果是这样的话他们为什么这样做呢?

另外,即使上面的内容说inverse_of不能通过关联工作,这个页面

如果在连接模型上使用belongs_to,最好在belongs_to上设置:inverse_of>选项,这意味着以下示例在> tags是has_many:through association)的情况下正常工作:

并给出了这个例子

@post = Post.first
@tag = @post.tags.build :name => "ruby"
@tag.save
Run Code Online (Sandbox Code Playgroud)

最后一行应该保存通过记录(一个Taggable).这仅在设置>:inverse_of时才有效:

class Taggable < ActiveRecord::Base
  belongs_to :post
belongs_to :tag, :inverse_of => :taggings
end
Run Code Online (Sandbox Code Playgroud)

对我来说,这一切似乎都是不一致和高度混乱的.但总的来说,我认为对每一种关系都说反转都没有害处.那是问题吗?我见过很多人在SO上问这个问题,并没有看到任何人的肯定是或否.

ruby-on-rails ruby-on-rails-3 rails-activerecord

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

如何从 OncePerRequestFilter 访问 Spring 控制器上的方法注释

在 OncePerRequestFilter (方法 doFilterInternal)中,我想访问有关最终将运行的控制器方法(最好是控制器本身)的信息。具体来说,我正在寻找该方法的注释。有没有办法从 doFilterInternal 方法访问它?

问题是,在无法访问方法本身的信息集的情况下,我们必须查看过滤器中的 url 来确定该方法是否属于这个特定类别。很快就会变得丑陋

if (url == "foo" || url == "bar" ... etc)
Run Code Online (Sandbox Code Playgroud)

理想情况下我们可以说

if(method.hasAnnotation(Blah.class)) //or however it would look

@Blah
public void controllerMethod(...){}
Run Code Online (Sandbox Code Playgroud)

在方法级别指定这一点会更简洁。有没有办法做到这一点,或者我缺少其他一些方法?

java spring annotations spring-annotations

6
推荐指数
0
解决办法
2029
查看次数

如何在打字稿中引用除第一个以外的所有参数

我想在另一个函数中引用一个函数的参数类型,但只使用它们的一个子集。

//params of bar should be same as foo, except p1 should be a different type

function foo(p1: string, p2: number, p3: boolean){
 ...
}

//i'd like to do something like this, though it's obviously not valid syntax
function bar(p1: string[], ...rest: Parameters<typeof foo>.slice(1)){
}
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?显然,仅使用 3 个参数手动完成并不难,但在我的实际代码中,我有更多参数,我不想重复它们。

typescript

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

jquery ui sortable - 使用包含时拖动无法正常工作

我遇到了 jquery ui 可排序问题,无法拖动某些项目(我猜是因为项目元素的高度)

\n\n
<div class="container">\n<fieldset>\n    <legend>handle 1 THIS CAN\'T BE DRAGGED BELOW HANDLE 2</legend>\n    <div>blah<br /></div>\n</fieldset>\n<fieldset>\n    <legend>handle 2 BUT I CAN DRAG THIS ABOVE HANDLE 1</legend>\n    <div style="display: none">blah<br /></div>\n</fieldset>\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n

$(".container").sortable({\n   axis: \'y\',\n   handle: \'> legend\',\n   containment: \'parent\',\n   /*cursorAt: {top: 1},\n   start: function(event, ui) {\n      ui.placeholder.height(ui.item.height());\n      $(this).sortable(\'refreshPositions\');\n   },*/\n});\xe2\x80\x8b\n
Run Code Online (Sandbox Code Playgroud)\n\n

请参阅http://jsfiddle.net/ADyhR/10/ \n编辑:它似乎适用于 jquery ui 1.8.9。这只是 1.8.18 中的一个错误吗?

\n\n

注释掉的 javascript 行是我已经尝试过但还没有工作的东西,但我想我可能只是在使用它们的方式上略有偏差。

\n

javascript jquery jquery-ui sortables jquery-ui-sortable

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

将新项添加到jquery可排序,而不是通过刷新获取

我正在排序一个对象列表,其中一些是常规对象,其中一些是其他对象的容器.

使用句柄排序工作正常,除非我向容器添加新对象,刷新后无法识别.

我有以下HTML:

<button>add another option</button>
<div class="con">
    <div class="ui-state-highlight"><span class="handle">handle</span> Item 1</div>
    <div class="ui-state-highlight"><span class="handle">handle</span> Item 2</div>
    <div class="ui-state-highlight"><span class="handle">handle</span> Item 3</div>
    <div class="subthing">
        <span class="handle">handle</span>
        <div>    <span class="handle">subhandle</span> subitem</div>
        <div>    <span class="handle">subhandle</span> subitem</div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

和脚本:

$('button').click(function() {
    var x = $('<div class="ui-state-highlight"><span class="handle">handle</span> newthing</div>');
    x.appendTo('.con')
    $(".con").sortable('refresh')
});

var container = $(".con");
container.sortable({
    handle: container.children().children(".handle")
});?
Run Code Online (Sandbox Code Playgroud)

小提琴

如上面的代码所示,如​​果添加新项,则无法使用其余元素对其进行排序.我知道如果我说handle属性是.handle,它会这样做,但我不希望子句柄成为可排序的一部分.

jquery

4
推荐指数
1
解决办法
8607
查看次数

如何延迟Redux状态更改以允许React组件产生副作用

抱歉,标题模糊。解释我的问题的最好方法可能是一个例子。

我在redux中有一个项目,并且列表使用标准react-redux连接的组件显示在react组件中。每个单独的项目都有一个按钮,单击该按钮会执行一些异步工作,然后将其从列表中删除,并将其放在其他位置显示的另一个列表中。在redux中处理启动异步工作的逻辑很重要,因为它对我的应用程序的状态很重要。

该基本功能有效,但是现在我想向按钮添加反馈,以便当副作用成功时,它将标签更改为Checkmark(为简单起见,如果请求失败,我将不进行任何操作并保留列表不变)例)。该项目将被选中标记多停留一秒钟,然后再从列表中删除。

问题是,如果我在异步工作完成后立即从列表中删除该项目,则会立即将其卸载,因此我需要延迟该时间。我一直在尝试提出一种方法,以实现可在我的应用程序中重复使用的逻辑,因为我希望在应用程序的其他不相关部分中使用选中标记反馈。

一种简单的解决方案是在成功时调度一个操作,该操作仅更改状态以指示该项目的请求已成功,然后执行setTimeout在1秒后调度另一个操作以实际从列表中删除该项目。

我觉得如果我在有按钮的应用程序的不同位置执行此逻辑,它将变得非常重复。我希望不必为每个需要此按钮的按钮重复超时逻辑。但是我希望我的应用程序显示的内容代表我的应用程序的当前状态。

以前有没有人处理过这样的问题?

谢谢

编辑:我不认为它应该真正改变一般的解决方案,但我正在使用redux循环来处理副作用。我觉得通用解决方案可以与thunk或saga或其他任何东西一起很好地工作。

reactjs redux react-redux

3
推荐指数
1
解决办法
1018
查看次数

运行几次后,rails 测试数据库未清除

我正在使用 rspec 进行测试,我注意到在运行测试后,它有时会在测试数据库中留下一些记录。我不知道为什么。我在我的配置文件中将 use_transactional_fixtures 设置为 true。但是直到我手动删除记录它们才会消失。有没有人有办法阻止这种情况?

编辑; 在我说只有当测试失败时。事实并非如此。

rspec ruby-on-rails

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