ruby-on-rails - 如何从“date_select”中获取日期并进行验证?
问题描述
我是红宝石的初学者。我想从表单中获取日期并在子类中验证它们,但我不知道如何实现它们。也许我不知道如何从哈希中获取日期。请帮我。
# HTML
<%= form_with model: @order, scope: :order, url: update_signed_in_show_employer_url(order.employer, order_id: order.id) , method: :put, class: '' do |f| %>
<div class="form-group">
<label>start date:</label>
<% if order.signed_at.present? %>
<%= f.date_select :started_at, {default: order.signed_at}, { class: 'form-control m-b' } %>
<% end %>
</div>
<% end %>
# controller
def update_signed_in_show
@employer = Employer.find(params[:id])
logger.debug "singned_params: #{signed_params}"
@order = Order::Signed.find(params[:order_id])
......
end
# class Order::Signed < Order
validate :check_started_at
def check_started_at
if self.started_at.present? && self.ended_at.present?
if self.started_at.to_datetime < self.signed_at.to_datetime
errors.add :started_at, 'xoxoxoxoxo.......'
end
end
end
在控制器中,我可以读取表单中的参数。哈希:{“started_at(1i)”=>“2019”、“started_at(2i)”=>“4”、“started_at(3i)”=>“17”、“end_at(1i)”=>“2022” , "ended_at(2i)"=>"4", "ended_at(3i)"=>"17", "remark_of_signed"=>"", "status"=>"signed"}
我想在子类中进行验证,但收到一个错误:
NoMethodError(未定义的方法to_datetime' for nil:NilClass):
app/models/order/signed.rb:20:in
check_started_at'
解决方案
感谢Siim Liiser的帮助,我已经能够成功验证了。
# Order::Entered < Order
validate :check_ended_at
def check_ended_at
if self.started_at.present? && self.ended_at.present?
if self.ended_at < (self.started_at + signed_years_count.year)
errors.add :started_at, 'error message...'
end
end
end
推荐阅读
- git - Git:当完全相同的冲突再次发生时,我可以“挑选”合并冲突解决方案吗?
- java - 在 java 中 SSLv3 被禁用但在 javamail API ssl 中有效吗?
- vb.net - 使用 TaskFactory 调用异步 Sub 时出现编译器错误
- c# - 在 C# 中创建接口时出现堆栈溢出异常
- python-3.x - 通过总结其中一列外部合并两个数据框
- javascript - JS,img.attr 常量取不到值
- c# - 从字符串转换为 Icollection Automapper
- julia - 如何将 Array{Any,1} 的元素转换为 Array{Int64,1}
- java - 无法为具有某些字符的名称发送密钥
- excel - 如何在图表标题/标题中进行引用?