小编Pla*_*Ton的帖子

Rails 3迁移:添加引用列?

如果我创建一个新的rails 3迁移(例如)

rails g migration tester title:tester user:references
Run Code Online (Sandbox Code Playgroud)

,一切正常......但是,如果我添加一个包含以下内容的列:

rails g migration add_user_to_tester user:references
Run Code Online (Sandbox Code Playgroud)

参考字段无法识别.简而言之,问题是:如何从命令行向rails迁移添加引用列?

migration activerecord ruby-on-rails

162
推荐指数
8
解决办法
11万
查看次数

我的JavaScript模式/实践很糟糕.我应该在哪里寻求帮助?

在过去的几年里,我几乎专注于后端任务,我刚刚注意到,在我缺席的情况下,大多数JavaScript(和CoffeeScript)项目都变得更加漂亮.

我主要在rails环境中工作,几乎所有的JavaScript/jQuery都看起来像这样:

$(an_element).an_event(function() {
  stuff_i_want_to_do;
})

$(another_element).some_other_event(function() {
  some_other_stuff_i_want_to_do;
})
Run Code Online (Sandbox Code Playgroud)

抛开回调,这几乎就是它.

无论如何,只是浏览一些其他人的代码,并注意到许多javascripters在我不在的时候变得更漂亮.这并不复杂,但它是我所见过的更新/更好的JavaScript方法的典型:

jQuery -> 
  if $('#products').length
    new ProductsPager()

class ProductsPager
  constructor: (@page = 1) ->
    $(window).scroll(@check)

  check: =>
    if @nearBottom()
      @page++
      $(window).unbind('scroll', @check)
      $.getJSON($('#products').data('json-url'), page: @page, @render)
#

  nearBottom: =>
    $(window).scrollTop() > $(document).height() - $(window).height() - 50

  render: (products) =>
    for product in products
      $('#products').append Mustache.to_html($('#product_template').html(), product)
    $(window).scroll(@check) if products.length > 0
Run Code Online (Sandbox Code Playgroud)

我一直在寻找有关JavaScript(和/或CoffeeScript)的现代最佳实践/模式的资源,但我没有太多运气.所以简而言之,我应该在哪里加快速度:最好的javascript/coffeescript现代模式和实践?

javascript jquery ruby-on-rails coffeescript

47
推荐指数
2
解决办法
3941
查看次数

Rails:避免工厂女孩的重复错误......我做错了吗?

假设我有一个模型user,它对该email字段有唯一性约束

如果我打电话Factory(:user)一切都很好,但是如果我第二次打电话它会因"条目已存在"错误而失败.

我目前正在使用一个简单的帮助程序在创建工厂之前在数据库中搜索现有条目...并调用我通过该帮助程序创建的任何工厂.

它有效,但它并不完全优雅,考虑到我认为这个问题有多常见,我猜这是一个更好的解决方案.那么,工厂女孩是否有一种内置return_or_create的工厂方式,而不仅仅是提前充电create()?如果没有,大多数人如何避免与他们的工厂重复输入?

ruby-on-rails-3 factory-bot

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

RSpec:带有参数的Stub链?

只是想知道是否/如何在rspec存根链中传递参数.举个例子,假设我有以下行动:

def index
  @payments = Payment.order(:updated_at).where(:paid => true)
  @bad_payments = Payment.order(:some_other_field).where(:paid => false)
end
Run Code Online (Sandbox Code Playgroud)

在我的控制器规范中,我希望能够存根两种方法并返回不同的结果.如果只有@payments场地在行动中,我会使用类似的东西

Payment.stub_chain(:order, :where) { return_this }
Run Code Online (Sandbox Code Playgroud)

但是,当然,这将返回相同的值@bad_payments.

那么 - 简而言之,我如何包含:updated_at:paid => true作为存根条件?

rspec ruby-on-rails stub

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

Rails测试找不到test_helper

我正在尝试通过ruby test/unit/mytest.rb运行单独的测试,但我总是得到一个"没有这样的文件加载 - test_helper"错误.谷歌提出了一些建议,但没有一个对我有用.我在Ubuntu 10.10上运行Rails 3.0,Ruby 1.9.2(通过RVM)

这是我到目前为止所尝试的 - 任何建议都非常感激

  • 在test/unit/mytest_test.rb 中将"require test_helper"更改为"require File.dirname(FILE)+"/../test_helper"".它带回"没有这样的文件加载 - 测试/单位/../ test_helper"
  • 尝试运行rvm test/unit/mytest_test.rb与上面相同
  • 尝试运行ruby -I test/unit/mytest_test.rb.没有消息到终端.大约5分钟后等待事情发生,ctrl + c'd了

任何建议非常感谢 - 我很难过.

ruby testing ruby-on-rails

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

Rails 3.0和Ruby 1.9.2rc:Rake命令返回'已初始化的常量'和堆栈级别太深的错误.有任何想法吗

我正在尝试在Ubuntu 10.04上运行Rails 3 beta 4和Ruby 1.9.2rc.它最初工作,但在完成我的第一个bundle install/package之后,我现在在所有rails项目中都遇到以下错误.即使是基本的"rails new testproject",然后是rake,也会显示错误消息.

简而言之,我很难过.关于可能导致这种情况的任何帮助都将非常感激.

我注意到的唯一 - 可能相关或不相关 - 是〜/ .bundle文件中的目录是ruby/1.9.1.我的机器上没有安装1.9.1 - 只有1.9.2rc.ruby -v带回1.9.2

(in /home/john/Websites/sandbox/testerino)
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:32: warning: already initialized constant RAKEVERSION
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake/alt_system.rb:32: warning: already initialized constant WINDOWS
WARNING: Possible conflict with Rake extension: String#ext already exists
WARNING: Possible conflict with Rake extension: String#pathmap already exists
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:404: warning: already initialized constant EMPTY_TASK_ARGS
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:452: warning: already initialized constant EMPTY
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:960: warning: already initialized constant RUBY_EXT
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:964: warning: already initialized constant RUBY
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1033: warning: already initialized constant …
Run Code Online (Sandbox Code Playgroud)

ruby rake ruby-on-rails

25
推荐指数
2
解决办法
9461
查看次数

Rails缓存数据库查询和最佳实践

我网站上的数据库负载变得非常高,所以现在是时候缓存常见查询,这些查询每小时调用1000次,结果不会发生变化.例如,在我的城市模型中,我执行以下操作:

def self.fetch(id)   
  Rails.cache.fetch("city_#{id}") { City.find(id) }   
end 

def after_save
  Rails.cache.delete("city_#{self.id}")
end

def after_destroy
  Rails.cache.delete("city_#{self.id}")
end
Run Code Online (Sandbox Code Playgroud)

所以现在,当我第一次点击数据库时,我可以使用City.find(1),但接下来的1000次我从内存中得到结果.大.但是大多数对城市的调用都不是City.find(1),而是@ user.city.name,其中Rails不使用fetch但是再次查询DB ...这有意义但不完全是我想要它做的.

我可以做City.find(@ user.city_id),但这很难看.

所以我向你们提问.聪明人在做什么?这样做的正确方法是什么?

memcached caching ruby-on-rails

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

Rails/Rspec:测试delayed_job邮件

只是想知道如何测试动作邮件请求实际上是发送到rspec中的delayed_job que.

我原以为它很简单,但我的delayed_job队列似乎没有增加.代码如下:

控制器:

  def create
    @contact = Contact.new(params[:contact])
      if @contact.save
        contactmailer = ContactMailer
        contactmailer.delay.contact_message(@contact)
        redirect_to(contacts_url)
      else
        render :action => "new"
      end
Run Code Online (Sandbox Code Playgroud)

规格:

  it "queues mail when a contact is created" do
    expectedcount = Delayed::Job.count + 1
    Contact.stub(:new).with(mock_contact()) { mock_contact(:save => true) }
    post :create, :contact => mock_contact
    expectedcount.should eq(Delayed::Job.count)
  end
Run Code Online (Sandbox Code Playgroud)

在调用控制器之前和之后,Delayed :: Job.count都返回0.我已经尝试从控制器中取出条件,但我仍然无法使延迟的作业数增加.

任何建议赞赏 - 欢呼

rspec ruby-on-rails delayed-job

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

Vim:如何设置高效的自动完成配置?

我现在一直在使用Vim并且喜欢它,但是当我使用其他编辑器时我注意到的一件事是我从未真正实现自动完成工作效率很高.我有supertab和snipmate工作,我有我正在使用的任何语言的标签设置,但不知何故,使用这么多似乎有点太麻烦,除了长方法名称,我通常只是避免自动完成.

有没有人在vim中设置快速,全面的自动完成功能?特别:

  • 目前,我点击"tab"自动完成类/方法/变量名称并生成片段,但是Ctrl + X + O用于内置语言命令.我宁愿按Tab键查看所有内容.

  • 订购似乎并不太聪明.非常常见的东西通常隐藏在一堆很少使用的命令中间.

  • 我已经设置了autocomplpop以显示我正在键入的潜在自动填充功能,但我必须按Tab键两次才能接受第一个条目.一个相当单一的标签吧.

那么,有关在vim中设置高效,全面的自动完成配置的任何提示吗?我知道这个问题有点模糊 - 但是如果有人对他们如何自动完成的概述有了概述,和/或指南的链接,我将不胜感激.

vim autocomplete

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

Rails:使用RSPec进行性能基准测试

我只是从rake:test来到RSpec,我很难找到任何等同于rake测试:基准和/或rake测试:profile.

那么,大多数rspec人员用于性能测试的是什么?我发现了--profile,它吐了十个最慢的测试,但我希望能有一些更全面的东西.

干杯...

performance benchmarking rspec ruby-on-rails

20
推荐指数
2
解决办法
6548
查看次数