我有以下型号:
class Question < ActiveRecord::Base
belongs_to :user, :readonly => true
end
Run Code Online (Sandbox Code Playgroud)
我希望:readonly => true属性可以防止用户被更改,即
# assume we've set up user_1, user_2 and question
# and that question.user == user_1
question.user = user_2
question.save
question.reload
question.user == user_2 # true - why?
Run Code Online (Sandbox Code Playgroud)
为什么这是真的 - 我预计:readonly => true会阻止在初始创建后更改此属性?如果没有那么:readonly选项实际上做了什么?
编辑
使用attr_readonly会给出我正在寻找的不可改变性(不变性?).
class Question < ActiveRecord::Base
belongs_to :user
attr_readonly :user_id
end
Run Code Online (Sandbox Code Playgroud)
它唯一的问题是当你试图改变属性时它永远不会引发异常,因此很容易从静默失败中获取错误.
我用它bundle exec autotest来运行我的测试规范但是我也希望能够进出调试器.
我无法弄清楚如何运行自动测试,也听不到调试命令.每次通过调试器语句时,它都会打印:
***** debugger statement ignored, use -d or --debug option to enable debugging
Run Code Online (Sandbox Code Playgroud)
我试过用这两个选项调用自动测试,即
bundle exec autotest --debugger
# => just ignores the debugger
bundle exec autotest -d
# => complains that -d is an invalid option
bundle exec autotest --debug
# => still doesn't trigger but advises
# "debugger statement ignored, use -d or --debug option to enable debugging"
Run Code Online (Sandbox Code Playgroud)
如何在使用自动测试时调用调试器?
目前我总是不得不回到手动呼叫 rspec spec -d
(我的设置是Rails 3)
我需要创建一些可用于我的应用程序(模型,视图和控制器)和RSpec的方法.
具体来说,我需要创建一些包含关键逻辑的path_helper方法.我需要让它们可用于RSpec,以便我可以运行如下测试:
controller.should redirect_to my_custom_path_helper(@object)
Run Code Online (Sandbox Code Playgroud)
我认为他们应该去某个地方/lib然而我不知道如何构建它(mixin模块 - 如果是这样我应该将模块混合到哪里?).
如果我可以从RSpec访问应用程序助手,则可以选择其他选项.
编辑:请注意
这不是关于测试辅助方法的问题,而是关于使应用程序和RSpec都可以访问它们.
我需要这样做,因为我需要围绕我的rails path_helpers的包装器逻辑,当我should redirect_to .._path在RSpec中测试时,我不想复制那些路径助手的逻辑.
我想使用Google电子表格显示我的数据库分析
我希望能够使用Google Apps脚本在我的Heroku Postgres数据库上进行摘要查询,然后在Google电子表格中显示和绘制它们.
Heroku提供了许多连接到Heroku Postgres的方法:https: //devcenter.heroku.com/articles/heroku-postgresql
同样,Google Apps脚本可以访问许多不同的外部服务 https://developers.google.com/apps-script/defaultservices
我以前从未尝试过这个,所以我对最简单的事情感兴趣.
JDBC似乎有可能,但还有其他选择吗?
据我所知,两者之间唯一的重叠是JDBC,我没有经验,但感觉像是一个重量级的第三个协议,用于在系统之间进行.
是JDBC是获取数据的最佳方式还是有些更简单我缺少?
我想使用Bower管理客户端资产,Bower会安装angular into等资源
/vendors/assets/components/angular/angular.js
我在application.css.scss文件中引用这些资产如下:
/* ...
*= require bootstrap
*/
Run Code Online (Sandbox Code Playgroud)
然而,虽然这适用于开发并且文件包含在内,但是它们不会被链轮拾取用于在Heroku上进行编译.
如何指示Sprockets从中获取和编译文件/vendor/assets/components/?
我想跑
rake db:migrate
Run Code Online (Sandbox Code Playgroud)
但是每次我都会遇到以下错误:
rake aborted!
can't activate test-unit (= 1.2.3), already activated test-unit-2.3.0. Make sure all dependencies are added to Gemfile.
/Users/petenixey/project/Rakefile:12:in `<top (required)>'
(See full trace by running task with --trace)
Peters-MacBook-Air:pingpanel petenixey$
Run Code Online (Sandbox Code Playgroud)
我有其他宝石依赖于test-unti 2.3.0,我似乎找不到其他人有同样的问题.
我最近有一些关于宝石问题的垃圾时间,非常感谢人们的建议.谢谢
编辑 我注意到的另一件事是,如果我使用下面的gemfiles和gemsets创建一个完全新鲜的Rails项目,rake db:migrate 确实有效.这会告诉我在环境设置或类似情况下出现问题,但我无法弄清楚是什么.
----------------使用--trace运行时出现完整错误
rake aborted!
can't activate test-unit (= 1.2.3), already activated test-unit-2.3.0. Make sure all dependencies are added to Gemfile.
/Users/petenixey/.rvm/gems/ruby-1.9.2-p180@global/gems/bundler-1.0.13/lib/bundler/rubygems_integration.rb:150:in `block in replace_gem'
/Users/petenixey/project/tasks/rspec.rake:1:in `<top (required)>'
/Users/petenixey/.rvm/gems/ruby-1.9.2-p180@test/gems/activesupport-3.0.7/lib/active_support/dependencies.rb:235:in `load'
/Users/petenixey/.rvm/gems/ruby-1.9.2-p180@test/gems/activesupport-3.0.7/lib/active_support/dependencies.rb:235:in `block in load'
/Users/petenixey/.rvm/gems/ruby-1.9.2-p180@test/gems/activesupport-3.0.7/lib/active_support/dependencies.rb:225:in `block in load_dependency'
/Users/petenixey/.rvm/gems/ruby-1.9.2-p180@test/gems/activesupport-3.0.7/lib/active_support/dependencies.rb:596:in …Run Code Online (Sandbox Code Playgroud) 我无法理解该-g标志在 NPM 中的工作原理。具体来说,我正在努力理解它与 NPM 模块公开的命令行功能有何关系。
我认为本地安装包和全局安装包之间的区别很简单,本地包在特定项目之外不可用。当然,全局安装的包在任何项目中都可用。我有 Rails 背景,所以对我来说这类似于将 gem 安装到特定 RVM 中与将其安装到全局 RVM 中。它只会影响它可用的地方。
然而,NPM 的意义似乎不仅仅是范围。对于具有命令行功能的软件包,例如wait-on,该软件包(据我所知)在命令行上不可用,除非它是全局安装的。
$ npm install wait-on
$ wait-on
=> -bash: /usr/local/bin/wait-on: No such file or directory
Run Code Online (Sandbox Code Playgroud)
$ npm install wait-on -g
$ wait-on
=> Usage: wait-on {OPTIONS} resource [...resource]
Description:
wait-on is a command line utility which will wait for files, ports,
sockets, and http(s) resources to become available (or not available
using reverse flag). Exits with success code (0) …Run Code Online (Sandbox Code Playgroud) Ruby中是否有一种简单的方法可以从某些东西中获取true/false值,而无需将其明确地计算为true或false
例如,如何更简洁地表达
class User
def completed_initialization?
initialization_completed == 1 ? true : false
end
end
Run Code Online (Sandbox Code Playgroud)
是否有某种方法可以做一些事情
initialization_completed.true?
Run Code Online (Sandbox Code Playgroud)
显然没有多少但是因为我在Ruby的zen花园里,我不妨接受它
编辑(我更新了示例)
正如@Sergio Tulentsev非常温和地指出的那样,这个问题非常严厉.原始示例(下面)当然直接评估为布尔值.我仍然在努力寻找一个我的意思的例子,但塞尔吉奥的双重否定实际上正是我所寻找的.
原始的例子
class User
def top_responder
responses.count > 10 ? true : false
end
end
Run Code Online (Sandbox Code Playgroud) 我想在下面的数组中找到条纹的长度:
states = [:read, :read, :read, :unread, :unread, :read, :read, :read, :read]
Run Code Online (Sandbox Code Playgroud)
数组有:read或者:unread,我希望每个条纹的长度为:read/ :unread.因为states,这将成为:
streak_lengths = [3, 3, 3, 2, 2, 4, 4, 4, 4]
Run Code Online (Sandbox Code Playgroud)
该阵列有三个打开:read的元素,而我们每个标签的那些作为一个的一部分3连胜,但随后有两个:unread要素,所以他们各自用一个2连胜,最后我们有四个读消息的连胜,所以他们每个都标有一个4.
什么是解决上述问题的优雅,高效和可读的方法?
这是一个递归问题吗?虽然我可以解决这个问题,但我觉得它暗示了一种我不熟悉的解决方法.它暗示也许这是通过递归最好地解决的问题.
(有关的利益"可能重复"应用于此标志:两个线程实际上有略微不同的讨论,除了从搜索的角度来看,你只会发现另一个线程,如果你搜索重复字符,这个答案你如何检测重复的数组元素.最后这里有很多优秀的答案,删除这个问题不会让生态系统更富裕,只会更穷)
我想点击一个可观察量,以便在可观察量的第一个值发出时执行一个方法。我想这样做以便在 UI 中打开或关闭加载状态:
\n// Current .create observable\npublic create = (entry: EntryPatch): Observable<Entry> =>\n this.http.post<NodeResponse<Entry>>(this.serviceEndpoint, entry).pipe(\n map((response: NodeResponse<Entry>) =>\n upsertNode<Entry>(response.data, this.entriesStore)))\nRun Code Online (Sandbox Code Playgroud)\npublic create = (entry: EntryPatch): Observable<Entry> =>\n this.http.post<NodeResponse<Entry>>(this.serviceEndpoint, entry).pipe(\n tapFirst(() => this.datastore.loading = true), // \xe2\xac\x85\xef\xb8\x8f pseudocode\n map((response: NodeResponse<Entry>) =>\n upsertNode<Entry>(response.data, this.entriesStore)),\n finalise(() => this.datastore.loading = false)) // \xe2\xac\x85\xef\xb8\x8f switch off loading indicator\nRun Code Online (Sandbox Code Playgroud)\n实现运算符的最佳方法是什么.tapFirst(因为它实际上不存在)?
正如@Lesiak 下面指出的,我上面提出的结构实际上是在服务器返回响应后启动加载指示器,这不是我的意图。Hoewver 甚至认为原来的问题是错误的,我要放弃它,因为已发布的答案仍然非常有用,并且解决了这个问题中隐含的两个请求
\na) 如何包装整个可观察\nb) 如何检测第一次发射
\nruby ×3
heroku ×2
rspec ×2
activerecord ×1
algorithm ×1
bash ×1
bower ×1
circleci ×1
debugging ×1
jdbc ×1
postgresql ×1
rake ×1
rxjs ×1
sprockets ×1
typescript ×1