*(星级)在Ruby中意味着什么?

可能重复: 什么是*运算符在Ruby中对此字符串执行的操作 可能在其他地方有答案,但我只是不知道如何找到它… 如果我是对的, *表示在函数定义中使用的多个参数: def hero(name, *super_powers) 但是*在代码中做了什么: Hash[*[[:first_name, ‘Shane’], [:last_name, ‘Harvie’]].flatten] # => {:first_name=>”Shane”, :last_name=>”Harvie”}

POST json到rails服务器

def create req = ActiveSupport::JSON.decode(request.body) if user = User.authenticate(req[“email”], req[“password”]) session[:user_id] = user.id render :json => “{\”r\”: \”t\”}” + req else render :json => “{\”r\”: \”f\”}” end end ‘create’方法在控制器中并映射到“/ login”,我正在设置正确的内容类型并从我的curl客户端接受标头。 我一直收到422 http状态响应。 有什么建议?

使用Selenium模仿将文件拖到上传元素上

我有一个网页,当你点击一个按钮时打开一个div。 此div允许您将文件从桌面拖到其区域; 然后该文件上传到服务器。 我正在使用Selenium的Ruby实现。 通过在Firefox中使用JavaScript调试器,我可以看到一个名为“drop”的事件正被传递给某些JavaScript代码“handleFileDrop(event)”。 我认为如果我要创建一个模拟事件并以某种方式触发它我可以触发此代码。 如果发现一篇有趣的文章似乎指向了一个很有希望的方向,但我仍然没有把它全部搞清楚。 我可以使用Selenium的get_eval方法将JavaScript传递给页面。 使用this.browserbot调用方法让我获得了我需要的元素。 所以: 如何构建需要成为模拟放置事件一部分的文件对象? 如何触发掉落事件,使其被拾取,好像我在div中删除了一个文件?

ROR +无法安装tiny_tds

在这里,我试图从MS-SQL Server 2008获取数据到Ubuntu 10上的我的Rails应用程序。但是我无法安装tiny_tds 。 我按照github给出的步骤进行操作。 但没有回应。 请指导我正确设置。 使用gem命令:: gem install tiny_tds 这个命令也是:: gem install tiny_tds –with-freetds-include=/usr/local/include/freetds –with-freetds-lib=/usr/local/lib 错误: Installing tiny_tds (0.4.5) with native extensions /home/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/rubygems/installer.rb:483:in `rescue in block in build_extensions’: ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError) /home/.rvm/rubies/ruby-1.9.2-p180/bin/ruby extconf.rb looking for library directory /home/.rvm/gems/ruby-1.9.2-p180@rails3/lib … no looking for library directory /home/.rvm/gems/ruby-1.9.2-p180@rails3/lib/freetds … no […]

Ruby:IF语句中的Nils

我正在使用的rails应用程序中有以下非常难看的ruby代码: if params.present? if params[:search].present? if params[:search][:tags_name_in].present? … end end end 所有我想问的是是否已经定义了params [:search] [:tags_name_in],但因为params,params [:search]和params [:search] [:tags_name_in]可能都是nil,如果我使用… if params[:search][:tags_name_in].present? …如果没有参数或没有搜索参数,我会收到错误。 肯定有一个更好的方法来做到这一点……建议?

为什么人们会在ruby中的属性上使用一元运算符? 即&:首先

可能重复: Ruby / Ruby on Rails&符号冒号快捷方式 作为一种习惯,我会尝试定期阅读一些别人的源代码并在一个要点上对其进行评论。 现在我正在阅读sinatra的基础应用程序,并发现了一些有趣的代码(这是他们的Request类的一部分) def accept @env[‘sinatra.accept’] ||= begin entries = @env[‘HTTP_ACCEPT’].to_s.split(‘,’) entries.map { |e| accept_entry(e) }.sort_by(&:last).map(&:first) end end 我没有得到的部分是&:last和&:首先做什么?!? 它似乎是疯狂的!

为什么我们要避免在rails中使用类变量@@?

为什么我们要避免在rails中使用类变量@@? 这有什么安全漏洞吗? 请回答,因为我是新的rails。 我正在使用实例变量@variable_name 。 我试过一次@@variable_name 。 我只知道类变量是, 类变量在对象之间是可共享的 但我真的想知道为什么我们要避免在rails中使用类变量@@?

解析与操作的可变范围和顺序:“if”中的赋值

我的理解是,行前面的if语句在行前面的代码之前进行了评估: ‘never shown’ if (false) 并且可以在if语句中进行赋值。 ‘shown’ if (value = ‘dave is king’) value #=> “dave is king” 并且,当分配了不存在的变量时,将创建该变量。 事先不需要它存在。 这是真的? 如果所有这些假设都是真的,为什么会失败呢? error_array < undefined local variable or method `error’ for 它在数组推右前分配给错误? 我想了解什么时候进行评估。 这个确实有效: if (error = import_value(value)) error_array << error end 现在我真的很困惑。

为什么在后钩中添加“sleep 1”会导致此Rspec / Capybara测试通过?

我使用的是rails 4.0.5,rspec 2.14.1,capybara 2.2.1,capybara-webkit 1.1.0和database_cleaner 1.2.0。 我通过以下function测试看到一些奇怪的行为(模拟用户在post上查看评论,将鼠标hover在图标上以显示菜单,然后单击菜单项以删除评论): let(:user){create(:user)} let(:post){create(:post, author: user)} let!(:comment){create(:comment, post: post, author: user)} … it “can delete a comment” do assert(page.has_css? “#comment-#{comment.id}”) find(“#comment-#{comment.id}-controls”).trigger(:mouseover) find(“#comment-#{comment.id} .comment-delete a”).click assert(page.has_no_css? “#comment-#{comment.id}”) end 这个测试大约80%的时间都失败了,总是由于某些记录从数据库中检索为nil – 我得到NoMethodError: undefined method X for nil:NilClass ,对于各种X值。有时nil是正在评论的删除,有时它是评论附加的post,有时它是评论/post的作者。 如果我在测试结束时添加sleep 1 ,它会通过: it “can delete its own comment” do assert(page.has_css? “#comment-#{comment.id}”) find(“#comment-#{comment.id}-controls”).trigger(:mouseover) find(“#comment-#{comment.id} […]

Google地图,Ruby on Rails,使用一个标记缩放级别

我正在使用apneadiving / Google-Maps-for-Rails添加谷歌地图支持(感谢真棒gem) 我发现了一个轻微的故障,这很可能是我的错。 当有多个标记时,auto_zoom很有效。 但是,当只有一个标记时,它会放大到不同的最大级别。 “zoom”仅在auto_zoom为false时有效,因此这不是我想要的。 因此,您可以使用“maxZoom”,但现在用户无法手动放大超出该点,这不是我想要的。 有没有解决的办法? 我的解释有意义吗? 这是Google Maps API的限制吗? 谢谢…