Rails 4 - 时区显示

时间:2016-01-11 07:05:16

标签: ruby-on-rails ruby time timezone

我试图在Rails 4中创建一个应用程序。

我有地址模型,个人资料模型和用户模型。

地址是多态的。

协会是:

Address.rb

belongs_to :addressable, :polymorphic => true

Profile.rb

belongs_to :user

  has_many :addresses, as: :addressable
    accepts_nested_attributes_for :addresses,  reject_if: :all_blank, allow_destroy: true

User.rb

  has_one :profile, dependent: :destroy

在我的个人资料表单中,我要求用户添加他们的地址。地址表单字段包含用于存储用户时区的属性。

地址表单字段文件包含:

<div class="nested-fields">

  <div class="container-fluid">

                <div class="form-inputs">
                    <div class="row">
                <%=   f.country_select  :country, priority: [ "Australia", "New Zealand", "United Kingdom" ]  %>

                        </div>
              <div class="col-xs-3 col-xs-offset-1">
                <%= f.input :time_zone %>
              </div>

在我的个人资料展示文件中,我从我的个人资料视图文件夹中渲染部分文件,该文件夹用于显示时区中的时间。我试过了:

<% if @profile.addresses.any? %>

        <%= Time.now.in_time_zone(current_user.profile.time_zone) %>
    <% else %>
        <span class="profileeditlink">
            <%= link_to "Add your location" %>
        </span>

当我尝试这个时,我在服务器日志中显示此错误:

ActionView::Template::Error (undefined method `time_zone' for #<Profile:0x007f97b35c0380>)

我可以在个人资料表单中填写地址表单字段并提交,但记录在显示页面中没有更新。如果我在控制台中设置时区,它会更新并且不会显示。

当我检查谷歌中的代码时,它只是一个带有&#39; ...&#39;的空div标签。介于两者之间。

任何人都可以看到我做错了吗?

这篇文章似乎暗示我在时区显示中使用的表达形式应该有效:

https://robots.thoughtbot.com/its-about-time-zones

我将这个私有方法添加到我的地址控制器中,试图查看它是否有任何区别。它没有(至少为此目的)。虽然我不能说我已经理解了它的意义。

  around_action :user_time_zone, :if => :current_user
def user_time_zone(&block)
  Time.use_zone(current_user.profile.time_zone, &block)
end

我在每个地址和配置文件控制器中都包含了strong_params。我无法想到要检查的其他内容。

我的地址表有:

t.string   "time_zone"

2 个答案:

答案 0 :(得分:0)

我认为您收到t.string :timezone错误,因为您可能没有在迁移文件中定义字段current_user.profile.methods

否则,如果您确实在迁移文件中定义了它,那么请运行:time_zone以查看<%= form_for(@instance_variable) do |f| %>方法是否可见。

另外,请确保您的包含 在制作rails表单时<%= f.submit %>str.erase(i, 2); 以确保正确提交数据。

请参阅:Form forin time zone

祝你好运!

答案 1 :(得分:0)

有时候我很笨拙。这很有效。

<%= Time.now.in_time_zone(current_user.profile.addresses.first.time_zone) %>