2015-02-11 54 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