2010-06-24 78 views
0

我們有一個user模型,其中:has_one detail。在form_for用戶中,我想要一個下拉菜單來選擇用戶的詳細信息'time_zone如何在form_for的select方法中使用嵌套屬性?

我已經試過

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

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

但我得到一個NoMethodError爲detail.time_zone。這樣做的正確語法是什麼 - 或者如果這樣做是不可能的,我應該怎麼做呢?

回答

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 %> 
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/

+0

修正了等於。感謝指向time_zone_select的指針。但是,您的示例不起作用,因爲time_zone不屬於用戶,它屬於user.detail。我如何指定? – Simon 2010-06-24 10:03:55

+0

我編輯了我的答案。它現在應該工作。 – 2010-06-24 10:20:27