我的Rails应用程序中有一个名为"Photo"的RESTful资源.我正在使用Paperclip来提供我的照片的不同"样式"(缩略图等),我正在使用自定义路径来RESTful访问这些样式:
map.connect "photos/:id/style/*style", :controller => "photos", :action => "show"
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我想写一个测试,以确保它保持这种方式.
我已经有一个功能测试来调用Photo控制器的show动作(实际上是由scaffold生成):
test "should show photo" do
get :show, :id => photos(:one).to_param
assert_response :success
end
Run Code Online (Sandbox Code Playgroud)
它测试URL"/ photo/1"处的动作执行情况.现在我想测试URL"/ photo/1/style/foo"的执行情况.不幸的是,我似乎无法使用ActionController :: TestCase来访问该URL; get方法总是想要一个action/id,并且不接受URL后缀.
如何测试自定义网址?
在检查@ fernyb的答案时,我在同一个rdoc中找到了这个片段
在测试中,您只需传递URL或命名路由即可获取或发布.def send_to_jail get'/ jail'assert_response:success assert_template"jail/front"end
但是,当我实际尝试时,我收到一条错误消息:
test "should get photo" do
get "/photos/1/style/original"
assert_equal( "image/jpeg", @response.content_type )
end
ActionController::RoutingError: No route matches {:action=>"/photos/1/style/original", :controller=>"photos"}
Run Code Online (Sandbox Code Playgroud)
我想知道我做错了什么.
我有一个包含十进制数字的Ruby String.将其转换为十进制(定点)的最佳方法是什么?
"最好"意味着:
......大致按顺序排列.
我有一个ActiveRecord模型对象Foo; 它代表一个标准的数据库行.
我希望能够显示此对象的实例的修改版本.我想重用这个类本身,因为它已经拥有了我需要的所有钩子和方面.(例如:我已经有一个显示适当属性的视图).基本上我想克隆模型实例,修改它的一些属性,然后将它反馈给调用者(视图,测试等).
我不希望这些属性修改回到数据库中.但是,我确实希望id在克隆版本中包含该属性,因为它更容易处理路由助手.因此,我计划调用ActiveRecord::Base.clone(),手动设置克隆实例的ID,然后对新实例进行适当的属性更改.这让我很担心; 一个save()在修改过的实例上,我的原始数据将被破坏.
所以,我正在寻找锁定新实例,这样它不会伤害任何其他东西.我已经计划调用freeze()(基于这一理解,这可以防止对对象的进一步修改,尽管文档并不十分清楚).但是,我没有看到任何明显的方法来阻止save().
实现这一目标的最佳方法是什么?
如何在SQL Server中管理CLR(.NET)对象?
SQL Server中任何CLR代码的入口点都是静态方法.通常,您只会创建该方法范围内的对象.但是,您可以设想在静态成员中存储对象的引用,让它们转义方法调用范围.如果SQL Server在多个存储过程/函数调用中将这些对象保留在内存中,那么它们对于缓存应用程序可能很有用 - 尽管它们也更危险.
SQL Server如何处理这个问题?它甚至允许(非方法)静态成员吗?如果是这样,它在记忆中保留了多长时间?在每次CLR呼叫之后垃圾收集所有内容吗?它如何处理并发?
我正在寻找rails中版本数据库更改的解决方案.寻找非常基本的东西.
我的意思是像维基或SO编辑版本.
我正在创建一个Rails性能测试,如Rails指南中所述,我遇到了ruby-prof的问题.
我正在使用Ruby 1.9.2-p0(尽管在p320上遇到了同样的问题)和Rails 3.1.0.
我有一个非常简单的测试控制器,相当于这个例子.
根据指南,我需要先安装ruby-prof才能使用性能测试.果然,如果我在没有它的情况下运行我的性能测试,我得到:
在Gemfile中将ruby-prof指定为应用程序的依赖项以运行基准测试.
如果我按照指南的说明进行操作,我将其添加到我的Gemfile中:
gem'ruby-prof',:git =>'git://github.com/wycats/ruby-prof.git'
...从wycats存储库获取版本0.11.0.当我运行我的测试时,我收到此错误:
/Users/craig/.rvm/gems/ruby-1.9.2-p0/bundler/gems/ruby-prof-ffae61a89553/lib/ruby-prof/abstract_printer.rb:44:in `inspect': undefined method `to_s' for #<Class:0x000001025a3f18> (NoMethodError)
from /Users/craig/.rvm/gems/ruby-1.9.2-p0/bundler/gems/ruby-prof-ffae61a89553/lib/ruby-prof/abstract_printer.rb:44:in `full_name'
...
Run Code Online (Sandbox Code Playgroud)
但是"wycats"似乎并不是ruby-prof的规范Github回购.该文档涉及rdp(Roger Pack).如果我改用这个回购:
gem'ruby-prof',:git =>'git://github.com/rdp/ruby-prof.git'
...我得到版本0.11.2,并得到此错误:
/Users/craig/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.1.0/lib/active_support/testing/performance/ruby.rb:39:in
run': undefined methodvalues for [#]:Array(来自/Users/craig/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.1.0/lib/active_support/testing/performance.rb:140:in"run_profile"的NoMethodError ...
如果我直接使用来自rubygems的gem(同样,版本0.11.2),我会得到相同的错误:
宝石'红宝石'教授'
任何想法出了什么问题,或者如何解决它?
这是我的控制器:
class MyController < ApplicationController
include MyHelper
def index
get_list_from_params do |list|
@list = list
respond_to do |format|
format.html
format.xml { render :xml => @list }
format.json { render :json => @list }
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
......它所依据的帮手:
module MyHelper
def get_list_from_params(param = :id, &on_success)
raw_id = params[param]
begin
id = Integer(raw_id)
rescue
render :template => "invalid_id", :locals => {:id => raw_id }
else
yield MyList.new(id)
end
end
end
Run Code Online (Sandbox Code Playgroud)
...和我的功能测试(使用Shoulda):
class MyControllerTest < ActionController::TestCase
context "MyController index" do
setup do …Run Code Online (Sandbox Code Playgroud) 我有一个带有重载方法的类:
MyClass.DoThis(Action<Foo> action);
MyClass.DoThis(Action<Bar> action);
Run Code Online (Sandbox Code Playgroud)
我想将lambda表达式传递给Action版本:
MyClass.DoThis( foo => foo.DoSomething() );
Run Code Online (Sandbox Code Playgroud)
不幸的是,由于围绕"foo"变量的类型推断,Visual Studio无法区分Action<Foo>和Action<Bar>版本之间的区别- 因此它引发了编译器错误:
以下方法或属性之间的调用不明确:'MyClass.DoThis(System.Action
<Foo>)'和'MyClass.DoThis(System.Action<Bar>)'
什么是最好的解决方法?
我今天在浏览Rails 3 ActiveRecord源代码,并找到了一个方法,其中整个参数列表是单个星号.
def save(*)
Run Code Online (Sandbox Code Playgroud)
我找不到一个很好的描述(虽然我根据我对splat参数的了解有一些想法).
它做了什么,为什么要使用它?
我有三个块元素,我正在使用CSS Flexbox进行布局.(在我的例子中,它们恰好<select>s是<div>ider元素两边的两个;我正在构建一个List Builder控件.)
我想要的是:
除了上一个要求之外,Flexbox在所有这些方面做得非常出色.如果没有足够的空间将所有元素放在一行上,我就无法强制所有元素进行换行.
我正在使用相当简单的flexbox设置来实现布局:
.container {
display: flex;
flex-wrap: wrap;
flex-direction: row;
align-items: center;
}
select {
flex-basis: 10em;
flex-grow: 1;
}
.divider {
flex-basis: 3em;
flex-grow: 0;
text-align: center;
}
Run Code Online (Sandbox Code Playgroud)
这样做的问题是,如果容器宽度设置为足够宽的一个选择加分隔符的任何数量,它将包装结束选择,但不包括分隔符.我会在一行上得到一个选择加一个分频器,看起来很难看.
这个小提琴说明了这个问题:
http://jsfiddle.net/5s0yf74w/1/
是否可以通过调整CSS同时保留一般的flexbox布局来实现我想要的结果?
ruby ×4
.net ×2
c# ×2
activerecord ×1
clone ×1
controller ×1
css ×1
css3 ×1
database ×1
decimal ×1
flexbox ×1
lambda ×1
parsing ×1
rcov ×1
ruby-prof ×1
sql-server ×1
url ×1
versioning ×1