有没有办法对加载到 Rails 表单输入中的数据调用方法? (具体来说是一个文本字段)

发布于 2024-11-18 00:55:07 字数 828 浏览 2 评论 0原文

我正在使用 Rails 3.0.5,并且出于 这个问题,我需要在 text_field 输入上调用 utc_to_local 方法来获取日期时间。

我尝试过直接在视图中以各种方式调用该方法(作为起点),但我似乎找不到神奇的组合(之前没有在表单字段上调用过方法)。

/events/edit.html.erb(完整文件):

<h1>Edit This Event</h1>
<%= form_for(@event) do |f| %>
    <%= render 'fields', :f => f %>
    <div class="actions">
        <%= f.submit "Update Event" %>
    </div>
<% end %>

events/_fields.html.erb(仅相关行:)

<div class="field">
    <%= f.label      :time_start, "Start Time" %><br />
    <%= f.text_field  :time_start, :class => "datetimefield" %>
</div>

I'm using Rails 3.0.5, and for the reasons specified in this question, I need to call a utc_to_local method on the text_field input for a datetime.

I've tried calling the method in various ways directly in the view (as a starting point), but I can't seem to find the magic mix (haven't called a method on a form field before).

/events/edit.html.erb (full file):

<h1>Edit This Event</h1>
<%= form_for(@event) do |f| %>
    <%= render 'fields', :f => f %>
    <div class="actions">
        <%= f.submit "Update Event" %>
    </div>
<% end %>

events/_fields.html.erb (relevant lines only:)

<div class="field">
    <%= f.label      :time_start, "Start Time" %><br />
    <%= f.text_field  :time_start, :class => "datetimefield" %>
</div>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

感受沵的脚步 2024-11-25 00:55:07

直接回答:

<%= f.text_field  :time_start, :value => f.object.time_start.try(:method_name) :class => "datetimefield" %>

但是......你为什么不使用in_time_zone

Time.now.in_time_zone("Eastern Time (US & Canada)")

这将导致创建应用程序助手:

def time_zoned(string)
  return nil if string.nil?
  begin 
    time = Time.parse(string)
  rescue
    return nil
  end
  time.in_time_zone("Eastern Time (US & Canada)")
end

在您看来:

<%= f.text_field  :time_start, :value => time_zoned(f.object.time_start) %>

To answer straight:

<%= f.text_field  :time_start, :value => f.object.time_start.try(:method_name) :class => "datetimefield" %>

But... why don't you use in_time_zone?

Time.now.in_time_zone("Eastern Time (US & Canada)")

Which would lead to the creation of an Application Helper:

def time_zoned(string)
  return nil if string.nil?
  begin 
    time = Time.parse(string)
  rescue
    return nil
  end
  time.in_time_zone("Eastern Time (US & Canada)")
end

And in your view:

<%= f.text_field  :time_start, :value => time_zoned(f.object.time_start) %>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文