我试图在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"
答案 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 for和in time zone。
祝你好运!答案 1 :(得分:0)
有时候我很笨拙。这很有效。
<%= Time.now.in_time_zone(current_user.profile.addresses.first.time_zone) %>