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

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 回答
429 浏览

ruby-on-rails - 在哪里可以查询类型转换数组值?

我目前正在寻找使用 Rails 5.0.0.beta1.1在枚举实现之后使用ActiveRecord::Type::Value实现自定义类型。

到目前为止,我已经可以正确地将所有内容从数据库转换到数据库。

我唯一的问题是:我想在where()调用中将一个数组作为一个整体进行转换,而不是每个值。

现在,当我打电话时:

...它将每个值(1, 2, 3)传递给我的serialize方法,然后构建一个查询,例如

我宁愿决定那个调用的结果,所以基本上数组[1, 2, 3]被传递给我的serialize方法,而不是它的每个值。然后我可以将serialize它的值简单地与=

这可能吗?


编辑:我通过猴子修补ActiveRecord::ActiveRecord::ArrayHandler或多或少归档了我想要的东西

这现在使用受保护的方法:type_caster和一个新添加的方法.type_cast_where_array?

这个新方法必须添加到 ActiveRecord::TypeCaster::Map 中:

为了使默认类型 ActiveModel::Type::Value 工作,也必须修补:

现在在我的BitFieldType我可以覆盖该方法以返回 true:

最后但并非最不重要的一点是 ActiveRecord::TypeCaster::Connection 也必须使用新方法进行修补,以使所有测试通过。

我知道方法名称可能不是最好的,并且使用受保护的方法也很糟糕,但这似乎是一种键入强制转换数组的方法,其中调用没有太多代码更改并且所有 activerecord 测试都通过。

对此有何评论?

0 投票
3 回答
6945 浏览

ruby-on-rails - 从 iOS 应用程序连接到 ActionCable

我整天都被困在这上面。我有一个由 David Heinemeier Hansson 编写的非常简单的 ActionCable 示例应用程序(聊天应用程序)工作正常(https://www.youtube.com/watch?v=n0WUjGkDFS0)。

我正在尝试使用 iPhone 应用程序连接 websocket。当我连接到 时,我能够接收到 ping ws://localhost:3000/cable,但我不太确定如何从 javascript 上下文之外订阅频道。

0 投票
2 回答
16598 浏览

ruby-on-rails - Rails 5. 如果设置了一个许可键,则不需要使用强参数

我正在使用 Rails 5 创建 JSON Api。

我的控制器使用带有一个require属性的强参数,如下所示:

通常我必须像这样发送我的 JSON:

如果缺少必需的属性,我必须得到这个消息:

我的问题是,如果我从 JSON 中删除所需的属性并且我有一个permit与强参数共同的属性,它确实有效。

我发送的 JSON:

当我得到参数时,log我有:

{"permit1"=>data, "controller"=>"mycontroller", "action"=>"create", "require_attribute"=>{"permit1"=>1} }

似乎 Rails 创建了一个带有所需键的散列,而不是引发错误。但是我想在收到 JSON 时强制使用所需的属性。

有人有想法吗?

0 投票
1 回答
5968 浏览

ruby - Rails 5 升级:没有要插入的中间件:ActionDispatch::ParamsParser (RuntimeError)

我正在开发中将应用程序从 Rails 4.2 升级到 Rails 5 beta1.1。应用程序在升级前运行良好。我已经完成了基本的升级步骤(更新 Ruby、更新 Rails 和相关步骤:http ://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html )。Gemfile 也已更新为最新的 Gems。

当我运行 $ rails middleware 或 $ rails console 或 $ rails server 时,我收到以下错误:

这与 ActionDispatch::ParamsParser 已从 Rails 5 beta 中间件(https://github.com/rails/rails/commit/38d2bf5fd1f3e014f2397898d371c339baa627b1)中删除的事实有关。但是,在某种程度上,我的应用程序似乎仍在寻找它。

我在 config/application.rb 中尝试了 ActionDispatch::ParamsParser 的各种操作,例如删除它,当这不起作用时,我也尝试添加它。同样的错误。有什么办法可以克服这个错误?

0 投票
1 回答
13345 浏览

ruby-on-rails - 来自控制台的 ActionCable.server.broadcast

我可以在控制器中使用以下代码,但不能在控制台(两个开发环境)中使用。我正在使用 Rails 5.0.0.beta2。

控制台:

如何在控制台中使用它?

0 投票
3 回答
15473 浏览

ruby-on-rails - 不允许请求来源:使用 Rails5 和 ActionCable 时的 http://localhost:3001

Rails 5.0.0.beta2 中的应用程序在尝试使用 ActionCable 时出现服务器问题。

使用 localhost:3000 可以正常工作,因为这是大多数 ActionCable 的默认设置。但是如果我尝试在端口 3001 上运行 rails 服务器,它会给我Request origin not allowed: http://localhost:3001

ActionCable 文档提到使用类似的东西ActionCable.server.config.allowed_request_origins = ['http://localhost:3001'],如果我把它放进去,它对我有用config.ru

但这似乎是一个非常奇怪的地方。我觉得它应该可以放入初始化文件或我的 development.rb 环境配置文件中。

为了进一步证明我的观点,它应该被允许进入那里,ActionCable.server.config.disable_request_forgery_protection = true即使我将它包含在 development.rb 中,该设置也可以忽略请求来源。

为什么可以ActionCable.server.config.disable_request_forgery_protection在 development.rb 中工作,但ActionCable.server.config.allowed_request_origins不能(但在 config.ru 中工作)?

这不是一个紧迫的问题,因为我有几个选项可以解决。我只是想知道我是否遗漏了一些关于我想象这应该如何工作的明显内容。

0 投票
2 回答
457 浏览

ruby-on-rails - rails5 / params.merge 导致关于不安全的错误

有这个语法:url_for(params.merge(locale: :en))

Rails 5 阻止了它,抱怨以下内容:Generating an URL from non sanitized request parameters is insecure!

获得相同结果的最新适当语法可能是什么?

0 投票
2 回答
974 浏览

ruby-on-rails-5 - 在您的任何源路径中都找不到“api_controller.rb”

我正在尝试使用http://alessiofanelli.com/blog/building-a-rails-5-and-ember-js-app创建一个 Rails 5 api 应用程序。

我明白了

找不到 api_controller.rb

执行脚手架命令时出错,如下所示。

在进程 32480 中通过 Spring 预加载器运行调用 active_record 相同 db/migrate/20160204101609_create_teams.rb 相同 app/models/team.rb 调用 test_unit 相同 test/models/team_test.rb 相同 test/fixtures/teams.yml 调用 resource_route 路由资源:teams 相同app/serializers/team_serializer.rb 调用 scaffold_controller 在您的任何源路径中都找不到“api_controller.rb”。您当前的源路径是:/home/kpatil/.gem/ruby/gems/active_model_serializers-0.9.4/lib/active_model/serializer/generators/serializer/templates

在终端中显示以下消息

0 投票
4 回答
8223 浏览

ruby-on-rails - 如何使用 RSpec 测试 ActionCable 频道?

我想知道如何测试 ActionCable 频道。

假设我有以下聊天频道:

subscribed方法更新了数据库并定义了两个要跨频道广播的流,但细节不是很重要,因为我的问题是一个更普遍的问题:

  • 如何设置测试来测试订阅此频道所涉及的逻辑?

在测试控制器动作等类似交互时,RSpec 提供了许多辅助方法和各种实用程序,但我找不到有关 RSpec 和 ActionCable 的任何信息。

0 投票
2 回答
2372 浏览

ruby-on-rails - 使用 Rails 5 api_only 的 ActionMailer 视图

我目前正在尝试使用我的 Rails api 服务器设置邮件程序。目前,我收到以下错误:ActionView::MissingTemplate (Missing template user_mailer/welcome_email with "mailer". Searched in: * "user_mailer" ):

目前有一个视图在views/user_mailer/welcome_email.html.erb

我的users_mailer.rb样子如下:

我的控制器像这样调用邮件程序:

我试过设置config.api_only = false没有任何运气。