问题标签 [ruby-on-rails-3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
904 浏览

prototypejs - rails.js UJS 观察者错过了 form.submit()

在 Rails 3 应用程序中,我想让浏览器在某个复选框被切换时调用远程函数。在 Rails 2 中,这很容易通过传递

到复选框助手。在 Rails 3 中,remote_* 函数已被弃用,因此我尝试了以下解决方法:

  • 使用在复选框周围创建一个表单form_tag ... :remote => true
  • $("dummy_form").submit();通过从onclick处理程序调用提交表单

在 Rails 捆绑的 rails.js 文件中是一个监听submit事件的观察者。但是,这些似乎仅在用户单击提交按钮时触发,而不是在form.submit()被调用时触发(目前仅在 FF 中测试)。

这会产生不希望的效果,即提交不是通过 AJAX 在后台完成,而是以正常方式完成,因此浏览器会离开当前站点并显示来自控制器的响应。

有谁知道解决方法?也许完全不同的方式来获得相同的功能?

0 投票
3 回答
706 浏览

ruby-on-rails - 使用黄瓜从 lib 中需要身份验证文件

我第一次尝试黄瓜,我遇到了一个问题。我尝试使用RyanB 的漂亮身份验证生成器,但在运行 Cucumber 功能时似乎无法使用辅助方法。

我的部分功能给我带来了问题:

支持/paths.rb:

路线.rb:

为我提供身份验证帮助方法(如 current_user)的代码位于我的 lib/ 文件夹中。我试过了:

在我的 env.rb 中,但这似乎没有任何作用。那么我应该在这里做什么呢?我觉得应该有一个简单的解决方案,但这只是我的头脑。

额外信息

宝石环境:

我正在运行 Rails 3.0.0.beta,但我认为这与这种情况下没有任何关系。

0 投票
1 回答
1946 浏览

ruby-on-rails - Heroku上的Rails 3 x_sendfile

Rails 3 允许直接向 HTTP 客户端发送静态文件,并且性能更高,并绕过您的应用服务器进程(如所述,请参阅http://john.guen.in...

我想在heroku上部署我的应用程序。

heroku 使用 Nginx 0.6.32(参见http://docs.heroku.com/aspen)。

x_sendfile对heroku有效吗?

这是我在 Nginx http://wiki.nginx.org/NginxXSendfile上找到的

干杯

0 投票
2 回答
91 浏览

ruby-on-rails - 为什么在安装 rails 3 beta 后运行 script/x 任务时出现问题?

我在我的 OSX Leopard 中安装了 rails 3 beta。之后,我创建了一个 rails 项目来测试它。在其文件夹中,我无法执行脚本/生成,甚至无法执行脚本/服务器。

它返回“ -bash: script/server: No such file or directory”。我该如何解决这个问题?

0 投票
2 回答
1376 浏览

ruby-on-rails - 使用haml和rails3时遇到问题

安装 rails3 后,我在尝试使用 haml 时遇到问题。

我安装了更新的 gem,之后rails PROJECT_NAME,我haml --rails在它的根目录下安装了。

它显然工作得很好,因为我在插件 init.rb 中有 haml 文件夹,正如预期的那样。

但是当我尝试 rake 或 rails server 时,我得到:

使用 --trace 我得到这个:

0 投票
1 回答
1313 浏览

javascript - Ruby on Rails 3 Beta:在 ajax 获取请求时,我无法使用 html.erb 视图回复。有解决办法吗?

我已经开始使用 Rails 3 beta,并且正在尝试做我通常的入门项目。我创建了一个简单的项目列表,但使用 ajax 请求进行应用导航。在 Rails 3 中,我常用的代码不适用于基本脚手架,我收到一个

这是我的项目控制器的一个片段:

注意 format.js 行。我为我的 javascript 使用 Mootools 库,我还没有尝试过 rails 3 提供的新的不引人注目的钩子,所以我仍然手工编写它。这是在页面上单击“新”链接时触发的 javascript 请求。在 Mootools 中,Request.HTML 更新属性会更新我在 HTML 中具有 id 'main' 的 div。

所以当点击链接时发生了什么,控制器试图用我没有的 new.js.erb 文件响应 js 调用。在以前的 Rails 版本中,情况并非如此,它会自动回复 new.html.erb。如果我删除控制器中的 format.js 行,它会响应,但我不希望响应在通过 javascript 调用时具有布局。

Rails 3 beta 有什么改变吗?

0 投票
1 回答
1705 浏览

ruby-on-rails - 通过 Rails 中的 assert_routing 测试具有主机约束的路由

我有一个路由,我使用约束来检查主机,然后是一个基本上相同但没有主机限制的路由(这些实际上是命名空间,但为了简单起见,这个例子会做):

在通过浏览器访问时以及在定义主机和执行get "/page_key"等时的集成测试中,这些工作完全符合预期。

但是我想编写测试以确保这些路由到目前为止工作我没有太多运气,因为以下测试(目前在一个ActionController::IntegrationTest所以我可以设置主机)匹配没有约束的那个:

如果我尝试将 env 转储到约束 proc 中,我得到的只是--- :controller.

如果我摆脱了 assert_routing 并且只是进行get :show调用并转储@controller它确实会解析到正确的控制器(正如预期的那样,这些路由都可以通过 HTTP 请求正常工作)。

0 投票
6 回答
83767 浏览

ruby-on-rails - 您如何在 Rails 3 中确定 ActiveRecord 关联的范围?

我有一个 Rails 3 项目。Rails 3 带来了 Arel 和重用一个范围来构建另一个范围的能力。我想知道在定义关系(例如“has_many”)时是否有使用范围的方法。

我有具有权限列的记录。我想构建一个将我的权限列考虑在内的 default_scope,以便过滤记录(即使是通过关系访问的记录)。

目前,在 Rails 3 中,default_scope(包括我找到的补丁)不提供传递 proc 的可行方法(我需要后期变量绑定)。是否可以定义一个可以传递命名范围的 has_many ?

重用命名范围的想法如下:

或者隐式编码关系中的命名范围如下所示:

我只是想将 default_scope 与后期绑定一起应用。我更喜欢使用 Arel 方法(如果有的话),但会使用任何可行的选项。

由于我指的是当前用户,因此我不能依赖在最后一刻未评估的条件,例如:

0 投票
2 回答
510 浏览

ruby-on-rails - Rails 3内存问题

我正在开发一个基于 Ruby on Rails 3 beta 的新站点。考虑到它只是测试版,我知道这可能是个坏主意,但我仍然认为它可能会起作用。

现在虽然我在 Rails 消耗大量内存方面遇到了巨大的问题。

对于我今天的应用程序,每个请求消耗大约 10 mb,而且似乎也没有释放它。所以我认为这可能是因为我的应用程序膨胀,因此我创建了一个测试应用程序只是为了比较。

对于我的测试应用程序,我刚刚生成了一个带有脚手架的模型,然后在这个模型上创建了大约 20 条记录。

然后我转到索引页面并点击刷新,我可以立即看到内存起飞!比我的应用少,但每个请求仍然大约 1-3 mb。

我在 OSX Leopard 中工作,使用 Ruby 1.8.7、Rails 3.0.0.beta 和用于开发的 SQLLite db。

有人认出我的问题吗?

我真的很感激这里的一些帮助。:/

谢谢!

0 投票
1 回答
933 浏览

ruby-on-rails - Rails3 应用程序何时被初始化?

我一直在用 rails 3 和 bundler 左右战斗。如果尚未加载 rails 应用程序,则有一些 gem 无法正常工作。factory_girl 和 shoulda 都是示例,即使在 rails3 分支上也是如此。以 shoulda 为例,尝试运行时rake test:units出现以下错误:
DEPRECATION WARNING: RAILS_ROOT is deprecated! Use Rails.root instead. (called from autoload_macros at c:/code/test_harness/vendor/windows_gems/gems/shoulda-2.10.3/lib/shoulda/autoload_macros.rb:40) c:/code/test_harness/vendor/windows_gems/gems/shoulda-2.10.3/lib/shoulda/autoload_macros.rb:44:in 'join': can't convert #<Class:0x232b7c0> into String (TypeError) from c:/code/test_harness/vendor/windows_gems/gems/shoulda-2.10.3/lib/shoulda/autoload_macros.rb:44:in 'block in autoload_macros' from c:/code/test_harness/vendor/windows_gems/gems/shoulda-2.10.3/lib/shoulda/autoload_macros.rb:44:in 'map' from c:/code/test_harness/vendor/windows_gems/gems/shoulda-2.10.3/lib/shoulda/autoload_macros.rb:44:in 'autoload_macros' from c:/code/test_harness/vendor/windows_gems/gems/shoulda-2.10.3/lib/shoulda/rails.rb:17:in '<top (required)>'

深入挖掘 lib/shoulda/rails,我看到了:
root = if defined?(Rails.root) && Rails.root
Rails.root
else
RAILS_ROOT
end
# load in the 3rd party macros from vendorized plugins and gems
Shoulda.autoload_macros root, File.join("vendor", "{plugins,gems}", "*")

所以......这里发生的事情是在定义 Rails.root 时,Rails.root == nil,所以使用 RAILS_ROOT,并且 RAILS_ROOT==nil,然后将其传递给 Shoulda.autoload_macros。显然,rails 应用程序尚未初始化。现在使用 Bundler 的 Rails3,在 Bundler 方面有一些关于能够指定需要 gem 的顺序的喧嚣,但我不确定这是否会解决手头的问题。
最终我的问题是: environment.rb 文件(实际初始化应用程序)何时被拉入?初始化应用程序并在 config/application.rb 中的 Bundler.require 行之前发生碰撞是否有任何危害?我试图破解 bundler 来自己指定顺序,并首先拉入 rails gem,但在我看来,需要 rails gem 并没有真正初始化应用程序。
由于在初始化应用程序之前调用了这一行(在 config/application.rb 中),因此捆绑程序 Gemfile 中需要初始化 rails 的任何 gem 都会失败。

# Auto-require default libraries and those for the current Rails environment. Bundler.require :default, Rails.env