小编J P*_*ato的帖子

Rails 4.2使用secret_token吗?

Rails 4.2中是否需要使用secret_key_base和secret_token?设置都不会导致以下异常消息:

缺失secret_tokensecret_key_base对"生产"的环境中,在设置这些值config/secrets.yml

4.2升级指南(http://railsapps.github.io/updating-rails.html)说明了这一点:

使用rails new命令创建新的Rails应用程序时,会生成一个唯一的密钥并将其写入config/initializers/secret_token.rb文件.

但是当我生成我的应用程序时没有创建这样的文件,并且config/secrets.yml中没有对secret_token的引用

我假设错误消息是错误的,并且只需要secret_key_base.当我在我的开发机器上运行我的应用程序时,它只从secret_key_base开始,但在Engineyard中,设置secret_key_base(通过环境变量)不起作用.我仍然得到错误.

ruby-on-rails engineyard ruby-on-rails-4

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

Rails 3忽略Postgres唯一约束异常

什么是挽救异常并继续处理的正确方法?我有一个具有文件夹和项目的应用程序,通过名为folders_items的连接表具有habtm关系.该表具有唯一约束,确保没有重复的项目/文件夹组合.如果用户尝试多次将项目添加到同一文件夹,我显然不希望添加其他行; 但我也不想停止处理.

当违反唯一约束时,Postgres会自动抛出异常,因此我尝试在控制器中忽略它,如下所示:

rescue PG::Error, :with => :do_nothing

def do_nothing

end
Run Code Online (Sandbox Code Playgroud)

这在单次插入时工作正常.控制器执行渲染,状态代码为200.但是,我有另一种方法在循环中执行批量插入.在该方法中,控制器在遇到第一个重复行时退出循环,这不是我想要的.起初,我认为循环必须包含在正在回滚的事务中,但事实并非如此 - 重复插入之前的所有行.我希望它只是忽略约束异常并移动到下一个项目.如何防止PG :: Error异常中断此操作?

postgresql activerecord ruby-on-rails ruby-on-rails-3 rails-activerecord

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

Rails 4 after_save previous_changes不起作用

我在模型上有一个after_save回调,我正在调用previous_changes来查看属性(is_complete)是否发生了变化.即使属性发生更改,previous_changes也会返回空哈希.

这是回调:

after_save do |record|
  puts "********************"
  puts record.previous_changes.to_s
  puts record.is_complete
  puts "********************"
end
Run Code Online (Sandbox Code Playgroud)

这是我在日志中得到的:

********************
{}
true
********************
********************
{}
false
********************
Run Code Online (Sandbox Code Playgroud)

如果is_complete的值从true更改为false,则它应该在previous_changes哈希中.更新正在通过正常保存完成!而且我没有重新加载这个对象.

--- 更新 ---

我在发布问题时没有考虑过这个,但是我的模型使用了awesome_nested_set gem,看来这是重新加载对象或以某种方式干扰after_save回调.当我注释掉acts_as_nested_set时,回调似乎工作正常.

--- 更新2 ---

使用around_save回调修复此问题,该回调首先确定属性是否已更改,然后生成,然后执行在数据库中进行更改后需要执行的操作.工作解决方案如下所示:

around_save do |record, block|
  is_complete_changed = true if record.is_complete_changed?
  block.call
  if is_complete_changed
    ** do stuff **
  end
end
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails ruby-on-rails-4 awesome-nested-set

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