rub*_*nce 4 ruby ruby-on-rails
是否有可能将"1.hour"字符串转换为1.hour,将"2.hours"转换为2.hours in ruby?实际上我从表格的下拉列表中获取此值.我希望Time.now通过这样的方式添加它
time = Time.now + get_method(params[:hours_or_days])
Run Code Online (Sandbox Code Playgroud)
其中params[:days_or_hours]可能是"2.hours"或"1.hour"或"1.day".我想获得这些字符串的方法转换.可能吗?(通过某些方法send)
你不应该这样做,eval因为那时使用你网站的人可以发送任何Ruby代码串来执行,这对你的网站来说是一个糟糕的安全漏洞.您可以使用Regexp或白名单来验证字符串,但这样会很麻烦.
我想你应该评估1.hour和2.hours等渲染表单时.像这样的东西:
<%= select_tag(:days_or_hours, options_for_select({ "1 hour" => 1.hour, "2 hours" => 2.hours })) %>
Run Code Online (Sandbox Code Playgroud)
这会生成如下HTML:
<select name="days_or_hours">
<option value="3600">1 hour</option>
<option value="7200">2 hours</option>
</select>
Run Code Online (Sandbox Code Playgroud)
现在,提交表单时将传递秒数,您不必担心用户是选择了几小时还是几天.你的代码变成了:
time = Time.now + params[:days_or_hours].to_i
Run Code Online (Sandbox Code Playgroud)
另一种方法是分割字符串:
>> duration, method = '1.hour'.split('.')
=> ["1", "hour"]
>> duration.to_i.send(method)
=> 3600 seconds
Run Code Online (Sandbox Code Playgroud)
当然,您肯定想以某种方式保护它:
if duration_string =~ /^\d+\.(hour|minute|second)s?$/
# ...
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3001 次 |
| 最近记录: |