在rails中单独使用特定控制器创建之前跳过

如何在rails中单独跳过before_create特定控制器

class User < ActiveRecord::Base before_create :validate_email def validate_email ---- end end 

我希望单独在这个控制器上跳过这个,

  class FriendsController < ApplicationController def new end def create end end 

这是一个hack,但你可以在模型类中添加一个虚拟属性,它只是作为一个标志来指示回调是否应该运行。 然后控制器动作可以设置标志。 就像是:

 class User < ActiveRecord::Base before_create :validate_email, :unless => :skip_validation attr_accessor :skip_validation def validate_email ... end end class FriendsController < ApplicationController def create @user = User.find # etc... @user.skip_validation = true @user.save end end 

如果before_create回调的话,我不确定我的头脑:unless选项可以直接引用虚拟属性的名称。 如果不能,则可以将其设置为模型中方法名称的符号,只需让该方法返回skip_validation属性的值即可。

使用不调用回调的方法。 例如save(false),update_attribute。

跟随之类的东西

  class FriendsController < ApplicationController def new end def create @user=User.new({:email => "some_email@some_domail.com" }) @user.save(false) @this will skip the method "validate_email" end end 

EDITED

试试这个

  class User < ActiveRecord::Base def validate ---- end end 

 @user.save(false) 

不要完全使用@ user.save(false)跳过validation,除非您唯一要validation的是电子邮件地址。

你真的应该把这个逻辑转移到你的模型中

 before_create :validate_email, :if => :too_many_friends def too_many_friendships self.friends.count > 10 end 

与其他控制器相比,此控制器包含哪些逻辑或function差异? 你可以发布你不想要validation的其他控制器,然后我们可以将它与这个比较。