小编ins*_*mer的帖子

回滚失败的Rails迁移

如何回滚失败的rails迁移?我希望这rake db:rollback会撤消失败的迁移,但不会,它会回滚先前的迁移(失败的迁移减去一次).而且rake db:migrate:down VERSION=myfailedmigration也不起作用.我已经碰到了几次,这非常令人沮丧.这是我为复制问题所做的简单测试:

class SimpleTest < ActiveRecord::Migration
  def self.up
    add_column :assets, :test, :integer
    # the following syntax error will cause the migration to fail
    add_column :asset, :test2, :integer
  end

  def self.down
    remove_column :assets, :test
    remove_column :assets, :test2
  end
end
Run Code Online (Sandbox Code Playgroud)

结果:

==  SimpleTest: migrating =====================================================
-- add_column(:assets, :test, :integer)
   -> 0.0932s
-- add_column(:asset, :error)
rake aborted!
An error has occurred, all later migrations canceled:

wrong number of arguments (2 for 3)

好吧,让我们回滚:

$ rake db:rollback
== …

mysql ruby-on-rails rails-migrations rails-activerecord

80
推荐指数
6
解决办法
4万
查看次数

如何为功能测试(Rails)设置locale default_url_options

在我的application_controller中,我有以下设置来包含具有url_for生成的所有路径的语言环境:

  def default_url_options(options={})
    { :locale => I18n.locale }
  end
Run Code Online (Sandbox Code Playgroud)

我的资源路由有一个:path_prefix ="/:locale"

在网站上正常工作.

但是当涉及到我的功能测试时,:locale不会与生成的url一起传递,因此它们都会失败.我可以通过在我的测试中将语言环境添加到url来解决它,如下所示:

  get :new, :locale => 'en'
Run Code Online (Sandbox Code Playgroud)

但我不想手动将语言环境添加到每个功能测试中.

我尝试将default_url_options def添加到test_helper上面,但似乎没有效果.

有什么办法可以更改default_url_options以包含我所有测试的区域设置吗?

谢谢.

testing ruby-on-rails internationalization

12
推荐指数
3
解决办法
5625
查看次数

Rails:在数据库中存储二进制文件

使用Rails,我有理由在文件系统中而不是在数据库中存储附件(可能是任何时间的文件)吗?数据库对我来说似乎更简单,无需担心文件系统路径,结构等,只需查看blob字段即可.但是大多数人似乎都在使用文件系统,它让我觉得这样做有一些好处,我没有得到,或者使用数据库进行这种存储会有一些缺点.(在这种情况下,我正在使用postgres).

ruby-on-rails

11
推荐指数
2
解决办法
7404
查看次数

问题:activerecord(rails3),链接范围包含

在Rails3中,当链接两个范围(ActiveRelations)时,似乎存在一个问题,每个范围都有不同的include:

考虑这两个范围,这两个范围都可以自行运行:

第一范围:

scope :global_only, lambda { |user|
includes(:country)
.where("countries.area_id <> ?", user.area) }
Run Code Online (Sandbox Code Playgroud)

Work.global_only(user)=>(从SQL中删除字段列表以便易读)

SELECT * FROM "works" LEFT OUTER JOIN "countries" ON "countries"."id" = "works"."country_id" WHERE (countries.area_id <> 3)
Run Code Online (Sandbox Code Playgroud)

现在是第二个范围:

scope :not_belonging_to, lambda { |user| 
includes(:participants)
.where("participants.user_id <> ? or participants.user_id is null", user) }
Run Code Online (Sandbox Code Playgroud)

Work.not_belonging_to(user)=>(从SQL中删除字段列表以便易读)

SELECT * FROM "works" LEFT OUTER JOIN "participants" ON "participants"."work_id" = "works"."id" WHERE (participants.user_id <> 6 or participants.user_id is null)
Run Code Online (Sandbox Code Playgroud)

所以这两者都可以单独运作.

现在,将它们链接在一起:

Work.global_only(用户).not_belonging_to(用户)

SQL:

SELECT (list of fields) FROM "works" LEFT OUTER …
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails arel ruby-on-rails-3

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

自动测试无限循环

我在使用带有Rails项目的自动测试时遇到了一个问题,即当测试失败时(即,我修改了测试文件并且自动测试自动运行测试),自动测试会不断尝试运行测试(因为每次测试失败)文件尚未修改),而不是等到文件再次保存.随着咆哮通知,这可能是非常烦人的,而我正在尝试修复代码以使测试通过.它不会一直发生,但大部分时间都是如此.有没有其他人遇到这个并知道解决方案?谢谢.

testing ruby-on-rails

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