我正在创建一个婚礼rsvp应用程序并遇到了问题。我有一个带有一些字段的RSVP模型然后在我的表单中我添加了一个不属于RSVP模型的额外文本字段(text_field_tag
),但我想在我的rsvp.rb
模型中验证它使它成为必需品。
额外字段是"代码"我将在婚礼邀请函中提供的字段(如下所示)。
我也希望"比较"输入的"代码"在我的控制器rsvp_controller.rb
中创建rsvp时的有效静态代码。
new.html.erb
<%= form_for(@rsvp, :html => { class: 'form-horizontal', role: 'form' }) do |r| %>
<div class="form-group">
<div class="control-label pull-left">
<%= r.label :party, 'Name' %> <span class="required">*</span>
</div>
<div class="control-label">
<%= r.text_field :party, class: 'form-control', placeholder: 'Individual or family name', autofocus: true %>
</div>
</div>
...
<div class="form-group">
<div class="control-label pull-left">
<label for="rsvp_code">Enter code found in invitation</label> <span class="required">*</span>
</div>
<div class="control-label">
<%= text_field_tag 'rsvp_code', nil, class: 'form-control' %>
</div>
</div>
...
<% end %>
rsvp_controller.rb
def create
@rsvp = Rsvp.new(rsvp_params)
#compare the values of the text field to invitation code
#if values match then proceed
#else send error message
if @rsvp.save
flash[:success] = 'Thank you'
redirect_to root_path
else
render 'new'
end
end
rsvp.rb
class Rsvp < ActiveRecord::Base
validates text_field_tag presence: true #or something like this
end
答案 0 :(得分:3)
此处的其他答案将有效。但他们非常混乱。验证属于模型。
class Rsvp < ActiveRecord::Base
attr_accessor :rsvp_code
validates :rsvp_code, presence: true
end
您还需要将表单从<%= text_field_tag 'rsvp_code', nil, class: 'form-control' %>
更改为<%= f.text_field :rsvp_code, class: 'form-control' %>
详细了解attr_accessor
答案 1 :(得分:0)
由于该值未存储在模型中,因此在那里验证它没有意义。而是在控制器中添加此逻辑。根据您存储“静态代码”的方式,您的控制器逻辑应如下所示:
def create
if params["rsvp_code"] == "YOUR_CODE"
Rsvp.new(rsvp_params)
...
else
flash["error"] = 'Your invitation code does\'t match'
redirect_to rsvp_new_path
end
end