在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的其他控制器,然后我们可以将它与这个比较。