2013-02-19 53 views
2

我想跳過控制器功能的一些模型驗證。我做這樣的如何在rails中跳過特定函數的模型驗證?

型號:

attr_accessible :skip_method_2 
validates :name, presence: true, length: { maximum: 50 }, :unless => :skip_method_2 
VALID_PHONE_REGEX = /\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/ 
validates :phoneno, presence: true,uniqueness: { case_sensitive: false, :scope => :user_id}, format: { with: VALID_PHONE_REGEX }, :unless => :skip_method_2 

控制器:

def contacts_callback 
@contacts = request.env['omnicontacts.contacts'] 
@contacts.each do |contact| 
    next if current_user.contacts.exists?(:email => "#{contact[:email]}") 
    contact1 = current_user.contacts.new(:skip_method_2 => true) 
    contact1.name = contact[:name] 
    contact1.email = contact[:email] 
    contact1.group = "Others" 
    contact1.save 
end 
    redirect_to "/contact" 
end 

我不想被保存它:驗證=>假的。我想跳過contacts_callback函數的名稱和phoneno驗證。但它不起作用。

它在控制器中給出錯誤 - 未定義的局部變量或用於contacts_callback的方法`skip_method_2'。我已經在我的模型

+0

你只宣佈skip_method_2爲attr_accessible。你有沒有在attr_accessor中聲明它? – jvnill 2013-02-19 07:23:06

+0

是的,我也使用attr_writer,但它顯示控制器中的錯誤 未定義的局部變量或方法'skip_method_2'爲contacts_callback – 2013-02-19 07:24:53

+0

不,它應該是attr_accessor因爲你需要寫入它,你需要讀它 – jvnill 2013-02-19 07:27:12

回答

1

變化validates :name, presence: true, length: { maximum: 50 }, :unless => :skip_method_2

提到attr_accessible到

validates :name, presence: true, length: { maximum: 50 }, :unless => lambda {|x| x.skip_method_2}

也會檢出this答案

+0

我嘗試,但它給出錯誤 - 我的控制器中的未知屬性:skip_method_2 – 2013-02-19 08:14:28

+0

您需要設置'attr_accessible:skip_method_2'和'attr_accssor:skip_method_2'之前 – benchwarmer 2013-02-19 08:26:06

+0

謝謝...現在工作 – 2013-02-19 08:55:18

相關問題