Как использовать вложенный атрибут с методом выбора form_for? - PullRequest
0 голосов
/ 24 июня 2010

У нас есть user модель, которая :has_one detailform_for пользователе я хочу, чтобы раскрывающийся список выбирал данные пользователя: time_zone.

Я пробовал

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

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

, но я получаю NoMethodErrorдля detail.time_zone.Какой правильный синтаксис для этого - или если это невозможно сделать таким образом, как я должен это делать?

Ответы [ 2 ]

3 голосов
/ 24 июня 2010

Не забудьте использовать 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 голосов
/ 24 июня 2010

Почему после 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/

...