2015-02-11 56 views
1

我目前有一個使用Ruby on Rails中的simple_form gem創建的表單,但是我想添加一種'什麼是1 + 1'?問題和輸入字段作爲最後一個問題來消除機器人的風險等。我如何將這個函數添加到我的表單中?Ruby on Rails - 在simple_form gem中添加人員安全字段?

我的形式包括以下內容:

<%= simple_form_for @job, html: { multipart: true } do |form| %> 
    <h2>Job Position:</h2> 
    <%= form.input :position, input_html: { maxlength: 60 }, placeholder: "Job Position", label: false %> 
    <%= form.input :company, input_html: { maxlength: 60 }, placeholder: "Company name", label: false %> 
    <%= form.input :salary, input_html: { maxlength: 60 }, placeholder: "Salary", label: false %> 
    <%= form.input :contract, input_html: { maxlength: 60 }, placeholder: "Contract Type", label: false, collection: ['full time', 'part time', 'internship'], prompt: "Contract Type" %> 
    <%= form.input :city, input_html: { maxlength: 60 }, placeholder: "City", label: false %> 
    <%= form.input :expirydate, input_html: { maxlength: 60 }, placeholder: "Expiry date", label: false %> 
    <%= form.input :description, input_html: { maxlength: 60 }, placeholder: "Full job description", label: false %> 
    <%= form.input :apply, input_html: { maxlength: 60 }, placeholder: "How to apply", label: false %> 
    <h2>Your Contact Details:</h2> 
    <%= form.input :contactname, input_html: { maxlength: 60 }, placeholder: "Contact Name", label: false %> 
    <%= form.input :contactemail, input_html: { maxlength: 60 }, placeholder: "Contact Email", label: false %> 
    <%= form.input :contactphone, input_html: { maxlength: 60 }, placeholder: "Contact Telephone", label: false %> 
    <%= form.button :submit %> 
<% end %> 

回答

2

您可以驗證添加到您的模型是這樣的:

class Job < ActiveRecord::Base 
    attr_accessor :human_sum 
    validate :not_a_bot 

    private 

    def not_a_bot 
    if human_sum.to_i != 2 
     errors.add(:human_sum, 'Get out, you bot!') 
    end 
    end 
end 

然後在您的形式:

<%= simple_form_for @job, html: { multipart: true } do |form| %> 
    ... 
    <%= form.input :human_sum, label: 'What is 1+1?' 
<% end %> 

唐忘記在控制器中添加:human_sum到您允許的參數。

+0

如果您輸入'2'的正確答案,似乎沒有發佈帖子? 我已經把job.rb中的第一個代碼放在了我目前所擁有的下面,並將表單輸入放到了new.html.erb的表單上,該表單已經創建了該字段,如果您將不正確的數字放在那裏,不發佈,但同樣,如果你確實是正確的數字'2',它不會發布。 – user2498890 2015-02-11 12:15:18

+0

如果你把正確的答案('''2'''),那麼''human_sum.to_i''將等於''2'',這反過來不會給模型增加任何錯誤,並且驗證會通過。 '@ job''不會保存在你的控制器中,用戶可能會返回到表單視圖。如果你需要不同的行爲,請澄清。 – dgilperez 2015-02-11 12:18:24

+0

如果我輸入了錯誤的答案,它不會顯示任何錯誤。如果答案是正確的,我希望它發佈帖子並重定向到我的原始代碼所做的索引,如果它不成功,那麼我希望它保持在new.html.erb但在bot輸入上顯示錯誤領域。 – user2498890 2015-02-11 12:25:30