0

我们有一个user模型:has_one detail。在form_for用户中,我想要一个下拉菜单来选择用户的详细信息' time_zone

我试过了

<% form_for @user do |f| %>
    ... user stuff ...

    <%= f.select :"detail.time_zone", ...other args... %>
<% end %>

但我得到了一个NoMethodError详细的时间区域。这样做的正确语法是什么 - 或者如果不可能这样做,我应该怎么做?

4

2 回答 2

3

不要忘记accepts_nested_attributes_for在您的用户模型中使用:

class User < ActiveRecord::Base
  has_one :detail
  accepts_nested_attributes_for :detail
end

详细型号:

class Detail < ActiveRecord::Base
  belongs_to :user
end

用户控制器:

class UsersController < ActionController::Base
  def new
    @user = User.new
    @user.build_detail
  end
end

用户新建/编辑视图:

<% form_for @user do |u| %>
  <% u.fields_for :detail do |d| %>
    <%= d.select :country, Country.all.map { |c| [c.name, c.id] }
    <%= d.time_zone_select :time_zone %>
  <% end %>
<% end %>
于 2010-06-24T11:43:18.920 回答
0

为什么后面有冒号f.select?它也应该是<%=...而不是<%..

假设您的表中有一个“time_zone”列,

<% form_for @user do |f| %>
    ... user stuff ...
    
    # args: user object, time_zone method, prioritizing zones(separating list), default
    <%= f.time_zone_select :time_zone, nil, :default => "Pacific Time (US & Canada)", :include_blank => false %>
<% end %>

附加资源:

http://railscasts.com/episodes/106-time-zones-in-rails-2-1

http://railsontherun.com/2007/12/21/timezone-selection/

于 2010-06-24T09:58:30.033 回答