问题标签 [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.
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 在后台完成,而是以正常方式完成,因此浏览器会离开当前站点并显示来自控制器的响应。
有谁知道解决方法?也许完全不同的方式来获得相同的功能?
ruby-on-rails - 使用黄瓜从 lib 中需要身份验证文件
我第一次尝试黄瓜,我遇到了一个问题。我尝试使用RyanB 的漂亮身份验证生成器,但在运行 Cucumber 功能时似乎无法使用辅助方法。
我的部分功能给我带来了问题:
支持/paths.rb:
路线.rb:
为我提供身份验证帮助方法(如 current_user)的代码位于我的 lib/ 文件夹中。我试过了:
在我的 env.rb 中,但这似乎没有任何作用。那么我应该在这里做什么呢?我觉得应该有一个简单的解决方案,但这只是我的头脑。
额外信息
宝石环境:
我正在运行 Rails 3.0.0.beta,但我认为这与这种情况下没有任何关系。
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上找到的
干杯
ruby-on-rails - 为什么在安装 rails 3 beta 后运行 script/x 任务时出现问题?
我在我的 OSX Leopard 中安装了 rails 3 beta。之后,我创建了一个 rails 项目来测试它。在其文件夹中,我无法执行脚本/生成,甚至无法执行脚本/服务器。
它返回“ -bash: script/server: No such file or directory
”。我该如何解决这个问题?
ruby-on-rails - 使用haml和rails3时遇到问题
安装 rails3 后,我在尝试使用 haml 时遇到问题。
我安装了更新的 gem,之后rails PROJECT_NAME
,我haml --rails
在它的根目录下安装了。
它显然工作得很好,因为我在插件 init.rb 中有 haml 文件夹,正如预期的那样。
但是当我尝试 rake 或 rails server 时,我得到:
使用 --trace 我得到这个:
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 有什么改变吗?
ruby-on-rails - 通过 Rails 中的 assert_routing 测试具有主机约束的路由
我有一个路由,我使用约束来检查主机,然后是一个基本上相同但没有主机限制的路由(这些实际上是命名空间,但为了简单起见,这个例子会做):
在通过浏览器访问时以及在定义主机和执行get "/page_key"
等时的集成测试中,这些工作完全符合预期。
但是我想编写测试以确保这些路由到目前为止工作我没有太多运气,因为以下测试(目前在一个ActionController::IntegrationTest
所以我可以设置主机)匹配没有约束的那个:
如果我尝试将 env 转储到约束 proc 中,我得到的只是--- :controller
.
如果我摆脱了 assert_routing 并且只是进行get :show
调用并转储@controller
它确实会解析到正确的控制器(正如预期的那样,这些路由都可以通过 HTTP 请求正常工作)。
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 方法(如果有的话),但会使用任何可行的选项。
由于我指的是当前用户,因此我不能依赖在最后一刻未评估的条件,例如:
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。
有人认出我的问题吗?
我真的很感激这里的一些帮助。:/
谢谢!
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