小编Pet*_*xey的帖子

为什么不:readonly => true_to关联的真正工作?

我有以下型号:

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)

它唯一的问题是当你试图改变属性时它永远不会引发异常,因此很容易从静默失败中获取错误.

activerecord ruby-on-rails

4
推荐指数
1
解决办法
3004
查看次数

如何与Autotest同时运行Ruby调试器?

我用它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)

ruby debugging rspec

3
推荐指数
1
解决办法
1017
查看次数

我应该在哪里存储方法,以使它们可用于我的应用程序和RSpec?

我需要创建一些可用于我的应用程序(模型,视图和控制器)和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中测试时,我不想复制那些路径助手的逻辑.

rspec ruby-on-rails

3
推荐指数
1
解决办法
1729
查看次数

如何从Google电子表格连接到Heroku Postgres

我想使用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是获取数据的最佳方式还是有些更简单我缺少?

postgresql jdbc heroku google-sheets google-apps-script

3
推荐指数
1
解决办法
2638
查看次数

你如何指示Sprockets在Heroku上包含来自/ vendors/assets/components的文件?

我想使用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/

ruby-on-rails heroku sprockets bower ruby-on-rails-4

3
推荐指数
1
解决办法
1387
查看次数

Rake db:migrate具有冲突的测试单元gem依赖项(需要1.2.3,已安装2.3.0)

我想跑

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)

rake ruby-on-rails

2
推荐指数
1
解决办法
2946
查看次数

NPM 软件包是否必须全局安装才能通过命令行访问其功能?

我无法理解该-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)

bash circleci

1
推荐指数
1
解决办法
1055
查看次数

有没有一种简单的方法可以在不使用表达式的情况下将值计算为true/false?

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)

ruby

0
推荐指数
1
解决办法
73
查看次数

查找数组中重复元素的长度

我想在下面的数组中找到条纹的长度:

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.

什么是解决上述问题的优雅,高效和可读的方法?

这是一个递归问题吗?虽然我可以解决这个问题,但我觉得它暗示了一种我不熟悉的解决方法.它暗示也许这是通过递归最好地解决的问题.

(有关的利益"可能重复"应用于此标志:两个线程实际上有略微不同的讨论,除了从搜索的角度来看,你只会发现另一个线程,如果你搜索重复字符,这个答案你如何检测重复的数组元素.最后这里有很多优秀的答案,删除这个问题不会让生态系统更富裕,只会更穷)

ruby algorithm

0
推荐指数
2
解决办法
132
查看次数

如何仅针对第一个发出的值挖掘可观察值

我想点击一个可观察量,以便在可观察量的第一个值发出时执行一个方法。我想这样做以便在 UI 中打开或关闭加载状态:

\n

我目前的方法

\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)))\n
Run Code Online (Sandbox Code Playgroud)\n

以及我希望能够用它做什么

\n
public 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\n
Run Code Online (Sandbox Code Playgroud)\n

实现运算符的最佳方法是什么.tapFirst(因为它实际上不存在)?

\n

编辑

\n

正如@Lesiak 下面指出的,我上面提出的结构实际上是在服务器返回响应启动加载指示器,这不是我的意图。Hoewver 甚至认为原来的问题是错误的,我要放弃它,因为已发布的答案仍然非常有用,并且解决了这个问题中隐含的两个请求

\n

a) 如何包装整个可观察\nb) 如何检测第一次发射

\n

rxjs typescript

0
推荐指数
1
解决办法
2702
查看次数