我很难理解在以下场景中使用的工作流程:
用户创建模型,我们称之为Product.我们为它们提供了一个表单来填写.由于某些原因除了验证之外的保存错误(超时,访问被拒绝等等)在Ember中,这会使模型进入错误状态.从UI的角度来看,我想要做的就是在屏幕上显示一条消息(简单)并允许用户再次尝试(显然不那么容易).
我已经多次写过它不会重复使用事务.我理解这个的逻辑.对于新产品,我简单地创建另一个新产品,合并来自原始产品(属性,关系)的数据,并用新产品替换我的控制器的内容.虽然可能(希望)有更好的方法,但这并不难,看起来效果很好.
但是,当我编辑产品时,我遇到了一个严重的问题,上述解决方案无效.产品模型现在处于错误状态,我找不到任何方法来获取不同状态的此产品的副本.
我无法弄清楚的是,一旦它遇到错误状态,我可以用这个模型做什么.我尝试过以下方法:
回滚:这不起作用.您无法在错误状态下回滚事务.
重新加载:与上述相同.不允许在错误状态下重新加载记录.
获取记录的新副本:所以我尝试使用与现有记录相同ID的App.Product.find(id).它只是给我一个错误状态的现有记录的副本.
我希望我在这里遗漏一些相当基本的东西.是否可以很好地从错误状态(或无效状态)滚动记录?
如果有一种简单的方法来改变这些模型的状态,我们是否还应该为进一步的提交尝试创建一个新的事务?
我正在创建一个英文,中文和韩文网站.某些页面上有大部分布局和文本,例如"关于"页面.此页面将包含许多标题,许多文本段落和一些布局.
我的网站国际化的推荐方法是什么?我见过的所有例子都是针对按钮/链接等的短文本或文本.
我唯一的选择是在我的语言环境yaml文件中拥有大量的键/值对吗?或者有更好的方法吗?目前我的yaml中有一个键/值,键的结尾是_html,所以我可以在键中使用html但是它必须在一行上,因此它非常难看,难以维护且容易出错.
我有时想在git命令中使用当前分支名称.例如
git push origin feature/really-long-branch-name
Run Code Online (Sandbox Code Playgroud)
是否有一个git命令只给出分支名称,所以我可以做如下的事情?
git push origin current_branch
Run Code Online (Sandbox Code Playgroud)
有git rev-parse --abbrev-ref HEAD,但是那是在这种情况下,究竟是有用的.由于分支名称经常更改,因此设置默认分支也没有用.改变默认行为git push不是我正在寻找的,因为它仍然意味着我第一次输入完整的分支名称push.
编辑:
主持人,这个问题不是骗局,所以请不要因为这个原因而关闭.请仔细阅读我的问题的粗体部分.
使用传统的状态机定义,状态机记录可以同时处于多个状态吗?例如,如果我有一个User模型,用户可以同时subscriber处于a promotional_period状态和状态吗?
注意,我不是在问这样做是否有意义,我的问题是 - 是否可以使用状态机.
我正在Heroku Cedar堆栈上运行rails 3.1 app,它支持资产管道.Heroku 列出了3种编译资产的方法
显然#3对性能有害,而Heroku文档也建议不要这样做.但我不确定#1和#2之间哪个更好.
#1要求您运行rake assets:precompile并public/assets在git中包含您的文件夹.你的slug会更大,但我认为部署网站的停机时间会更短.但更大的段塞大小意味着应用程序启动速度较慢,所以也许这是一个洗牌.
由于在Heroku端进行预编译,#2将使部署更新需要更长的时间.但是,你会有一个较小的slu and,而且管理/记忆的次数较少.
我的问题是 - 哪种选择(#1或#2)最适合生产,为什么?
到目前为止它看起来像选项#2但我想确保我不会忽视某些东西.
我想明白之间的差别*(1..9),并[*1..9]
如果我将它们分配给变量,它们的工作方式相同
splat1 = *(1..9) # splat1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
splat2 = [*1..9] # splat2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)
但是,事情变得奇怪,当我尝试使用*(1..9)和[*1..9]直接.
*(1..9).map{|a| a.to_s} # syntax error, unexpected '\n', expecting tCOLON2 or '[' or '.'
[*1..9].map{|a| a.to_s} # ["1", "2", "3"...]
Run Code Online (Sandbox Code Playgroud)
我猜测问题的一部分是运营商的预测?但我不确定发生了什么.为什么我无法使用*(1..9)我可以使用的相同功能[*1..9]?
我正在使用rspec 1.3.2测试控制器动作,如下所示:
def action_foo
...
@bar.can_do_something?
...
end
Run Code Online (Sandbox Code Playgroud)
我正在尝试存根@bar(假设它是类的实例Bar)实例变量,但我无法.我想如果我有权访问any_instance那么我可以做Bar.any_instance.stub(:can_do_something?)但是我在使用的rspec版本中没有.
还有另一种访问方式和存根@bar吗?以下都不起作用:
@bar.stub(:can_do_something?)
controller.instance_variable_get("@bar").stub(:can_do_something?)
controller.stub_chain(:bar, :can_do_something?)
Bar.new.stub(:can_do_something?)
Run Code Online (Sandbox Code Playgroud)
编辑:
@bar分配在before_filter.就像是@bar = Bar.find(n)
我的项目目录中有一个.rvmrc文件(让我们调用它/GameScores).它将加载GameScores我移动到该目录时命名的gemset .这部分工作正常.
但是/GameScores,当我进入tmux时,我的终端不再使用GameScoresgemset.如果我这样做,rvm gemset name我会得到一个空白
知道如何解决这个问题吗?我希望能够在使用tmux时继续使用我的gemset.我目前的解决方法是在rvm gemset use GameScores进入tmux时简单地运行,但我不想每次都这样做.
我一直在玩 ruby 中的数组切片,但我不明白下面的最后两个结果:
a = [1,2,3]
a[2,1] # output is [3]
a[3,1] # output is [] ...why??
a[4,1] # output is nil ...according to the docs this makes sense
Run Code Online (Sandbox Code Playgroud)
为什么a[3,1]在a[4,1]nil 时会是一个空数组?
如果有的话,我也希望a[3,1]返回 nil。根据ruby 文档,如果起始索引超出范围,则数组拆分应返回 nil。那么为什么a[3,1]不返回零呢?
注意:这是在 ruby 1.9.2 上
我很难找到在ruby中使用的树数据结构.我可以研究一些众所周知的吗?我的要求很简单.我想创建一个树(或者它可能是一个图形)并找到一些节点之间的距离.例如,我可能有一个如下所示的树/图
A
/ \
B-----C
/ \ \
D E F
Run Code Online (Sandbox Code Playgroud)
我希望能够找到根节点(A)和所有其他节点之间的距离.所以(A,B)之间的距离应为1,(A,E)之间的距离为2,等等.即使从节点(A)你可以通过(A,B,C)到达(C),长度应该是因为有(A,C)的直接路径,所以仍然只是1.
我可以在ruby中使用树/图形宝石吗?