小编ace*_*reg的帖子

Rails has_many关联计数子行

什么是有效抓取父表的所有行的"轨道方式"以及每行的子节点数?

我不想使用,counter_cache因为我想根据一些时间条件运行这些计数.

陈词滥调的博客示例:文章表.每篇文章都有0条或更多条评论.

我希望能够提取每篇文章在过去一小时,一天,一周中有多少评论.

但是,理想情况下,我不想迭代列表并为每篇文章单独调用sql,也不想使用它:include来预取所有数据并在应用服务器上处理它.

我想运行一个SQL语句并获得一个包含所有信息的结果集.

我知道我可以硬编码了完整的SQL,也许可以使用.find,只是设置:joins,:group:conditions参数......但我想知道如果有一个"更好"的方式......又名"轨道办法"

提前致谢

grouping ruby-on-rails has-many

27
推荐指数
3
解决办法
2万
查看次数

使用Capybara从文本字段中删除内容

我正在编写一个用Capybara填充文本字段的脚本,但在填写字段之前,我想确保字段为空并且文本未自动填充.基本上,我正在寻找相反的

(Object) fill_in(locator, options = {})    #empty_content_of? delete?
Run Code Online (Sandbox Code Playgroud)

在这里找到:http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Actions.建议吗?

automation capybara

14
推荐指数
5
解决办法
9431
查看次数

RSpec'Expect'语法和惯用属性规范

这应该有一个简单的答案,但我很难找到它(已检查RSpec文档,使用RSpec的EverydayRails测试,谷歌搜索结果).在我的模型规范中,我喜欢包括基本属性规范,如下所示:

describe Foo do
  describe "basic attributes" do
    before { @foo = create(:foo) }
    subject { @foo }

    it { should be_valid }
    it { should respond_to(:color) }
    it { should respond_to(:height) }
    it { should respond_to(:some_other_attribute) }
    it { should respond_to(:you_get_the_idea) }
    ...
Run Code Online (Sandbox Code Playgroud)

我喜欢这些规格,因为如果我的工厂和/或模型中存在某种错误,这些规格可以帮助我快速找到它.

我已将expect语法合并到所有其他规范中,我喜欢它的读取方式,但是如何在这里使用它?一种选择可能是

expect(@foo).to respond_to(:color)
Run Code Online (Sandbox Code Playgroud)

另一个可能是

expect(it).to respond_to(:color)
Run Code Online (Sandbox Code Playgroud)

前者涉及使用should语法避免的重复,但后者对我来说看起来很奇怪(可能只是我).

我意识到这个问题更多的是关于风格而不是功能*,但我们Ruby开发人员对风格很认真,我希望遵循标准实践并拥有可读的,惯用的代码.任何帮助表示赞赏.谢谢.

更新:顺便说一下,我提议的选项都没有实际工作.他们都抛出undefined method 'expect'错误.现在我真的很困惑!

考虑到错误之后,我意识到这是因为should上面的规格在一行块内.那么,混淆是如何用期望语法编写单行块?鉴于此更新,问题非常关乎功能性,我会很高兴听到别人的想法.

4/2015更新

rspec > 3.0添加了另一种处理这些的方法,听起来rspec ~> 4.0会废除should语法.每个迈伦大师赛:

一些用户对如何与期望语法相关以及是否可以继续使用它表示混淆.它将继续在RSpec 3中提供(同样,无论您的语法配置如何),但我们还添加了一个与期望语法更加一致的备用API:

describe Post …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails

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

FactoryGirl通过调用另一个工厂的方法来定义属性

以下是FactoryGirl 文档中的示例:

FactoryGirl.define do
  factory :post do
    name "Post name"
    user
  end
end
Run Code Online (Sandbox Code Playgroud)

在此示例中,user正在调用另一个工厂.我想要做的是有效调用user.id,但将其设置为属性的定义.这是一个精简的例子:

**models/job.rb**
  ...
  belongs_to :assignee, :class_name => "User"
  belongs_to :user
  ...
  attr_accessible :assignee_id, :user_id
  ...
end


**factories/jobs.rb**
FactoryGirl.define do
  factory :job do
    assignee_id user.id      #what I would like to do, but triggers "undefined method 'id'" error
    user_id user.id          #user_id is an attribute of the model and is the job assignor
 end
Run Code Online (Sandbox Code Playgroud)

我试图整合讨论别名的文档部分,但没有运气:

FactoryGirl.define do
  factory :user, :aliases => [:assignee] do
  ....
Run Code Online (Sandbox Code Playgroud)

我觉得(希望?)我在这附近,但任何见解都值得赞赏.谢谢. …

testing ruby-on-rails ruby-on-rails-3 factory-bot

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

Rails Rspec错误 - 未定义方法`访问'

所以我是TDD的新手,我在测试中抛出一些Rspec错误......基本上在运行bundle exec rspec spec之后,我的undefined method 'visit'一些规格出错了.任何有关如何通过这些测试的帮助将非常感激:谢谢.

Failures:

1) User pages profile page 
 Failure/Error: before { visit user_path(user) }
 NoMethodError:
   undefined method `visit' for # <RSpec::Core::ExampleGroup::Nested_2::Nested_1:0x007ffda8049540>
 # ./spec/requests/user_pages_spec.rb:9:in `block (3 levels) in <top (required)>'

2) User pages profile page 
 Failure/Error: before { visit user_path(user) }
 NoMethodError:
   undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_2::Nested_1:0x007ffda4f3ac38>
 # ./spec/requests/user_pages_spec.rb:9:in `block (3 levels) in <top (required)>'

3) User pages signup page 
 Failure/Error: before { visit signup_path }
 NoMethodError:
   undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_2::Nested_2:0x007ffda8262e58>
 # ./spec/requests/user_pages_spec.rb:16:in `block …
Run Code Online (Sandbox Code Playgroud)

tdd bdd rspec ruby-on-rails capybara

9
推荐指数
2
解决办法
9497
查看次数

我应该在轨道上使用ruby中的has_one或belongs_to吗?

我希望Status在一些用户定义的设置之后有一个相对静态的模型(不同的用户可能在状态上有不同的值).

状态可以应用于不同的模型,例如ContactEvent.

所以返回的状态contact.status将不同于event.status

我想设计应用程序,以便状态表具有不同的类型(contactsevents).

什么是正确的策略和格式?

我正在考虑:has_one StatusContact模型中声明,并:status_id:contacts表中存储.同上Event.

:statuses table将具有状态值,类型和日期.

这有意义吗?你能建议一个更好的方法吗?

ruby-on-rails has-one belongs-to

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

无法将CSV文件播种到Rails应用程序中

我试图将2K记录播种到模型中,到目前为止我尝试使用所有不同的方法(更快的csv,fast_seederrailscasts ep).我觉得这应该很简单.我已经将所有数据都存储在CSV文件中,并且我已经建立了模型,准备播种.

到目前为止唯一有用的是RailsCasts剧集中的内容.我为我的属性插入了这段代码,它只播种了第一行(2K),就是这样:

Country.delete_all
open("#{Rails.root}/path_to_my_file") do |models|
  models.read.each_line do |model|
     column_1, column_2, column_3, column_4 = model.chomp.split(",")
     Model.create!(:attr_1 => column_1, :attr_2 => column_2, ...etc)
  end
end
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用FasterCSV基于其他一些问题,但我收到了一堆错误,说fastercsv已经包含在最新版本的ruby中,我似乎无法弄明白(这可能是我的错,但我没有我能找到一个好的SO问题,很好地解决了这个问题.

最后,Fast_Seeder似乎有一些潜力,它识别了我的所有条目,但没有将它们中的任何一个保存到模型中,因为我收到了这个错误:

SQLite3::SQLException: too many terms in compound SELECT:(all my columns)

无论如何,我觉得这应该很简单.我只有一个带有2K条目的CSV,以及我需要播种的空白模型.最好的方法是非常感谢,谢谢!

csv sqlite seed ruby-on-rails-3

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

Cloudwatch 日志 - 时间过去后没有事件数据

我查看了AWS 论坛和其他地方,但没有找到解决方案。我有一个 lambda 函数,它在调用时会创建一个日志流,其中填充日志事件。大约 12 小时后,日志流仍然存在,但是当我打开它时,我看到以下内容:

无事件数据

该链接解释了如何开始发送​​事件数据,但我已经进行了此设置,并且我正在发送事件数据,它会在一段时间后消失。

我猜测某处有一些设置(允许最大存储量或是否清除日志),但如果有,我还没有找到。

amazon-web-services amazon-cloudwatch amazon-cloudwatchlogs

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

Lambda vs Proc在内存和效率方面

我知道应该使用Procs和lambdas的不同情况(lambda检查参数数量等),但是它们会占用不同的内存量吗?如果是这样,哪一个更有效率?

ruby lambda proc

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