我有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)
知道出了什么问题吗?
我一直在阅读有关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上问这个问题,并没有看到任何人的肯定是或否.
在 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)
在方法级别指定这一点会更简洁。有没有办法做到这一点,或者我缺少其他一些方法?
我想在另一个函数中引用一个函数的参数类型,但只使用它们的一个子集。
//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 个参数手动完成并不难,但在我的实际代码中,我有更多参数,我不想重复它们。
我遇到了 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>\nRun 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\nRun 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我正在排序一个对象列表,其中一些是常规对象,其中一些是其他对象的容器.
使用句柄排序工作正常,除非我向容器添加新对象,刷新后无法识别.
我有以下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,它会这样做,但我不希望子句柄成为可排序的一部分.
抱歉,标题模糊。解释我的问题的最好方法可能是一个例子。
我在redux中有一个项目,并且列表使用标准react-redux连接的组件显示在react组件中。每个单独的项目都有一个按钮,单击该按钮会执行一些异步工作,然后将其从列表中删除,并将其放在其他位置显示的另一个列表中。在redux中处理启动异步工作的逻辑很重要,因为它对我的应用程序的状态很重要。
该基本功能有效,但是现在我想向按钮添加反馈,以便当副作用成功时,它将标签更改为Checkmark(为简单起见,如果请求失败,我将不进行任何操作并保留列表不变)例)。该项目将被选中标记多停留一秒钟,然后再从列表中删除。
问题是,如果我在异步工作完成后立即从列表中删除该项目,则会立即将其卸载,因此我需要延迟该时间。我一直在尝试提出一种方法,以实现可在我的应用程序中重复使用的逻辑,因为我希望在应用程序的其他不相关部分中使用选中标记反馈。
一种简单的解决方案是在成功时调度一个操作,该操作仅更改状态以指示该项目的请求已成功,然后执行setTimeout在1秒后调度另一个操作以实际从列表中删除该项目。
我觉得如果我在有按钮的应用程序的不同位置执行此逻辑,它将变得非常重复。我希望不必为每个需要此按钮的按钮重复超时逻辑。但是我希望我的应用程序显示的内容代表我的应用程序的当前状态。
以前有没有人处理过这样的问题?
谢谢
编辑:我不认为它应该真正改变一般的解决方案,但我正在使用redux循环来处理副作用。我觉得通用解决方案可以与thunk或saga或其他任何东西一起很好地工作。
我正在使用 rspec 进行测试,我注意到在运行测试后,它有时会在测试数据库中留下一些记录。我不知道为什么。我在我的配置文件中将 use_transactional_fixtures 设置为 true。但是直到我手动删除记录它们才会消失。有没有人有办法阻止这种情况?
编辑; 在我说只有当测试失败时。事实并非如此。
jquery ×2
rspec ×2
annotations ×1
java ×1
javascript ×1
jquery-ui ×1
react-redux ×1
reactjs ×1
redux ×1
shoulda ×1
sortables ×1
spring ×1
typescript ×1