我们有一个user
模型:has_one detail
。在form_for
用户中,我想要一个下拉列表来选择用户的详细信息“time_zone
。
我试过
<% form_for @user do |f| %>
... user stuff ...
<%= f.select :"detail.time_zone", ...other args... %>
<% end %>
但是我得到了一个NoMethodError
的detail.time_zone。这样做的正确语法是什么 - 或者如果不可能这样做,我应该怎么做呢?
答案 0 :(得分: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 %>
答案 1 :(得分: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 %>
其他资源: