我正在尝试在新的OS X Snow Leopard机器上安装Rails 3(安装了dev工具),当我sudo gem install rails,我收到以下错误:
ERROR: While executing gem ... (Gem::FormatException)
builder-2.1.2 has an invalid value for @cert_chain
Run Code Online (Sandbox Code Playgroud)
更新失败了.谁看过这个吗?我grep编写了"cert_chain"的builder-2.1.2目录,但找不到任何线索.
Ruby版本是1.8.7
OS X 10.6.6
谢谢!
我正试图用Ruby单行解决Project Euler中的问题,我很好奇是否有更优雅的问题解决方案:
Fibonacci序列中的每个新术语都是通过添加前两个术语生成的.从1和2开始,前10个术语将是:
1,2,3,5,8,13,21,34,55,89 ......
通过考虑Fibonacci序列中的值不超过四百万的项,找到偶数项的总和.
这是我在Ruby中的一行解决方案:
(1..32).inject([0,1]) {|arr, i| (arr << arr[-1] + arr[-2] if arr[-1] + arr[-2] <= 4000000) || arr}.inject(0) {|total, i| total += i.even? ? i : 0}
Run Code Online (Sandbox Code Playgroud)
我主要担心的是我只使用范围(1..32),因为我碰巧知道在Fibonacci序列中的数字开始超过4,000,000之前,这一切都是必要的.我希望不知怎的,它会以某种方式构建在单行中,但我无法弄明白.
不允许使用半冒号!
我有一个小小的演示设置,其中单击一个复选框通过AJAX切换属性.它工作正常,但Rails真的想渲染一些东西,所以我基本上是在我的视图中创建一个空白的toggle.js.erb文件.
有问题的控制器行为:
def toggle
@task = Task.find(params[:id])
respond_to do |format|
format.js do
if (@task.status != true)
@task.status = true
else
@task.status = false
end
@task.save
render :layout => false
end
end
end
Run Code Online (Sandbox Code Playgroud)
查看问题:
<h1>Tasks</h1>
<ul style="list-style-type: none;">
<% @tasks.each do |task| %>
<li id="<%= dom_id(task) %>">
<%= check_box_tag(dom_id(task), value = nil, checked = task.status) %>
<%= task.action %> <%= link_to 'Edit', edit_task_path(task) %>
<%= link_to 'Delete', task, :confirm => 'Are you sure?', :method => :delete, :remote => true %>
</li> …Run Code Online (Sandbox Code Playgroud) 我构建了这个方法来查找数组中最长的单词,但我想知道是否有更好的方法来完成它.我对Ruby很陌生,只是将其作为学习该inject方法的练习.
它返回数组中最长的单词或等长单词的数组.
class Array
def longest_word
# Convert array elements to strings in the event that they're not.
test_array = self.collect { |e| e.to_s }
test_array.inject() do |word, comparison|
if word.kind_of?(Array) then
if word[0].length == comparison.length then
word << comparison
else
word[0].length > comparison.length ? word : comparison
end
else
# If words are equal, they are pushed into an array
if word.length == comparison.length then
the_words = Array.new
the_words << word
the_words << comparison
else
word.length > …Run Code Online (Sandbox Code Playgroud) 我有这个jQuery插件:
$.fn.touchBind = function(func) {
$(this).live('touchmove', function() {
$(this).addClass('dragged');
});
$(this).live('touchend', function() {
if ($(this).hasClass('dragged') == false) {
func();
}
});
return this;
}
Run Code Online (Sandbox Code Playgroud)
并称之为:
$('.the-element').touchBind(function() {
$(this).hide();
});
Run Code Online (Sandbox Code Playgroud)
我的问题是,$(this)在$(this).hide()没有指向$('.the-element'),而是DOMWindow.有没有办法让这项工作成功?
最近,我需要解析当您在其开发工具中记录事件时Chrome网络浏览器生成的JSON,并从中获取一些时序数据.Chrome可以在很短的时间内生成大量数据,因此我最初构建的Ruby解析器非常慢.
因为我正在学习Go,所以我决定在Go和JavaScript/Node中编写脚本并进行比较.
最简单的JSON文件形式就是我在这个Gist中所拥有的.它包含表示发送以获取页面的请求的事件,以及表示响应的事件.通常情况下,有一个巨大的额外数据中进行筛选的量.这是它自己的问题,但不是我在这个问题上担心的问题.
我写的JavaScript脚本就在这里,我写的Go程序就在这里.这是我在Go中写的第一个有用的东西,所以我确定它有各种各样的不好.然而,有一两件事我注意到的是,它的多少在解析大JSON文件不是JavaScript慢.
在Go中使用119Mb JSON文件的时间:
$ time ./parse data.json
= 22 Requests
Min Time: 0.77
Max Time: 0.77
Average Time: 0.77
./gm data.json 4.54s user 0.16s system 99% cpu 4.705 total
Run Code Online (Sandbox Code Playgroud)
使用JavaScript/Node中的119Mb JSON文件的时间:
$ time node parse.js data.json
= 22 Requests
Min Time: 0.77
Max Time: 0.77
Avg Time: 0.77
node jm.js data.json 1.73s user 0.24s system 100% cpu 1.959 total
Run Code Online (Sandbox Code Playgroud)
(在这个例子中,最小/最大/平均时间都是相同的,因为我复制了JSON对象,以便拥有一个非常大的数据集,但这是无关紧要的.)
我很好奇是否只是JavaScript/Node在解析JSON方面更快(我想这不会特别令人惊讶),或者如果在Go程序中我做错了什么.我也很好奇我在Go程序中做错了什么,因为我确信它有很多错误.
请注意,虽然这两个脚本不仅仅是解析,但它肯定 json.Unmarshal()在Go中增加了很多时间.
更新
我添加了一个 …
我很好奇人们如何应对这种情况.我有一个应用程序,在"/ categories"之类的路由显示类别列表.单击每个类别时,将显示该类别中的产品列表,并且路径将更新为"/ categories/1/products"之类的内容.如果我导航一些,然后单击后退按钮,我应该只能渲染上一类别的产品列表视图,而无需重新渲染类别视图.
但是,我还需要确保当我直接导航到"/ categories/2/products"时,会呈现类别列表以及产品列表.
基本上,这意味着路由器必须对后退/前进历史导航做出不同于直接访问URL的响应.这类问题有一个共同的解决方案吗?
以前,我的Backbone路由器看起来像这样:
class App.Routers.ThingsRouter extends Backbone.Router
routes: '': 'index'
routes: 'previews/:id': 'show'
initialize: ->
@collection = new App.Collections.ThingsCollection
@collection.fetch
index: ->
view = new App.Views.ThingsIndex(collection: @collection)
$('#app-container').html(view.render().el)
show: (id) ->
@model = @collection.get(id)
view = new App.Views.ThingsShow(model: @model)
$('#app-container').html(view.render().el)
Run Code Online (Sandbox Code Playgroud)
导航到时http://localhost,我会index渲染视图,当点击单个元素时,我会获得show渲染的视图.但是,如果我http://localhost/things/1直接去(即通过键入URL),则show不会呈现视图.我意识到这是因为视图在@collection.fetch完成之前呈现.我将路由器更改为以下内容:
class App.Routers.ThingsRouter extends Backbone.Router
routes: '': 'index'
routes: 'previews/:id': 'show'
initialize: ->
@collection = new App.Collections.ThingsCollection
index: ->
@collection.fetch success: =>
view = new App.Views.ThingsIndex(collection: @collection)
$('#app-container').html(view.render().el)
show: (id) …Run Code Online (Sandbox Code Playgroud) 我正在构建一个应用程序(希望)处理会话创建和销毁JSON.目前,我发现这样做的最好方法是让Rails form_authentication_token作为成功的JSON响应的一部分返回到登录,即(在我的Api :: SessionsController中):
def create
@user = User.find_for_authentication(email: params[:email])
if @user && @user.valid_password?(params[:password])
sign_in(@user)
render json: { success: true, token: form_authenticity_token }
else
render json: { success: false, errors: ['Invalid email or password'] }, status: 401
end
end
Run Code Online (Sandbox Code Playgroud)
但是,我对CSRF相关安全性的了解并不足以让人知道这是不是一件坏事.任何帮助表示赞赏.
假设我有一个包含价格属性的数百万个小部件的数据库.小部件属于供应商,我通过首先从供应商处购买小部件然后将其销售给客户来向客户销售小部件.通过这个基本设置,如果客户要求我提供低于50美元的每个小部件,那么列出它们是微不足道的.
但是,我以不同的方式标记来自各个供应商的小部件的价格.因此,我可能会将供应商A的小部件标记为10%,我可能会以5美元的固定费率标记供应商B的小部件.在数据库中,这些标记将存储在具有我的ID,供应商ID,标记类型(平面,百分比)和标记率的连接表中.除此之外,供应商可以在向我销售时添加自己的标记(这些标记将与供应商的ID,我的ID和标记类型/费率在同一个连接表中).
因此,如果我想从供应商A出售45美元的小部件,它可能会被供应商的10%加价(达到49.50美元),然后是我自己的10美元平价加价(达到59.50美元).这个小部件不会出现在客户端搜索价格低于50美元的小部件中.但是,80美元的小部件可能会在到达客户端时被标记为45美元,并且应该在结果中返回.这些标记可能会发生变化,我们假设我是这个系统中数百人之一,通过供应商向客户销售小部件,所有这些都在该标记表中有自己的标记关系.
在数百万个对象中快速执行这样的计算有先例吗?我意识到这是一个巨大的,非平凡的问题,但我很好奇如何开始解决这样的问题.
ruby ×3
backbone.js ×2
javascript ×2
ajax ×1
builder ×1
checkbox ×1
csrf ×1
enumerable ×1
fibonacci ×1
go ×1
inject ×1
install ×1
jquery ×1
math ×1
node.js ×1
prototypejs ×1
rubygems ×1
session ×1
sql ×1
this ×1