2013-07-31 60 views
11

有一個聯繫頁面,它提供輸入姓名,電話,電子郵件和信息,然後發送給管理員的電子郵件。沒有理由將消息存儲在數據庫中。來自控制器的導軌驗證

問題。如何:

  1. 使用Rails的驗證控制器中,不使用模式可言,或模型

  2. 使用驗證,但沒有任何DB關係

UPD:

型號: 型號:

控制器:

def sendmessage 
cpm = ContactPageMessage.new() 
if cpm.valid? 
    @settings = Setting.first 
    if [email protected] 
     redirect_to contacts_path, :alert => "Fail" 
    end 
    if ContactPageMessage.received(params).deliver 
     redirect_to contacts_path, :notice => "Success" 
    else 
     redirect_to contacts_path, :alert => "Fail" 
    end 
else 
    redirect_to contacts_path, :alert => "Fail" 
end 
end 
end 
+0

我想你已經有一個同名的'ContactPageMes​​sage'類。這是問題。 –

+0

是否要將名稱,電話和電子郵件保存在數據庫中,只有消息需要驗證並且未保存在數據庫中? – user2801

+0

@sumi,我不想被任何東西保存到數據庫中。剛剛驗證。 – Roman

回答

8

您應該使用模型而不繼承ActiveRecord::Base類。

class ContactPageMessage 

    include ActiveModel::Validations 
    include ActiveModel::Conversion 
    extend ActiveModel::Naming 

    attr_accessor :whatever 

    validates :whatever, :presence => true 

    def initialize(attributes = {}) 
    attributes.each do |name, value| 
     send("#{name}=", value) 
    end 
    end 

    def persisted? 
    false 
    end 

end 

通過這一點,你能初始化新對象,並可以調用該對象的驗證。

我覺得你有相同名稱的不同類的名字,你的控制器代碼,我可以看到這一點:

if ContactPageMessage.received(params).deliver 
    redirect_to contacts_path, :notice => "Success" 
else 

,如果這是你的郵件類更名爲ContactPageMessageMailer。你不會有愛人得到那個錯誤。

希望它會有所幫助。謝謝

+0

我有這樣的:'私人方法''新'呼籲ContactPageMes​​sage:類'(使用Rails 4,也許錯誤在這裏?) – Roman

+0

在這裏粘貼你的應用程序跟蹤。 –

+0

以及您如何調用新方法?寫在這裏。 –

5

我還是建議你使用模型,軌道模型不必從ActiveRecord::Base繼承。 例如:

class Contact 
    include ActiveModel::Validations 
    attr_accessor :name, :telephone, :email, :message 
    validates_presence_of :name, :telephone, :email, :message 
    validates_format_of :email, with: EMAIL_REGEXP 
end 

,你可以在你的控制器使用它:

contact = Contact.new 
# ... 
if contact.valid? 
    # do something 
else 
    # do something else 
end 
-3

在你的模型,你可以添加下面這將只設置getter和setter方法的消息,你可以有驗證消息中沒有列db

attr_accessor :message 
validates :message, presence: true 
+0

'class Contact' 'validates:message,:presence => true' 'end' '#=> NoMethodError:undefined方法'驗證'聯繫人:類' –

+0

如果您已經有模型並且只有少數屬性你不需要將它存儲在數據庫中,那麼你可以使用這個選項。上述選項只能包含從ActiveRecord :: Base繼承的Model。如果你想要一個獨立的類,它應該作爲模型使用Rails4,它非常容易,你只需要在你的類中包含ActiveModel :: Model,並執行上述操作。參考[鏈接](http://edgeapi.rubyonrails.org/classes/ActiveModel/Model.html) – user2801