Как мне использовать вложенный атрибут с методом выбора form_for?
У нас есть 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. Каков правильный синтаксис для этого - или если это невозможно сделать таким образом, как я должен это делать?
2 ответа
Решение
Не забудьте использовать 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 %>
Почему после двоеточия 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 %>
Дополнительный ресурс: