Rails 3 вложенная форма с полями разработки не рендеринга - PullRequest
0 голосов
/ 09 марта 2012

Я пытался выяснить это часами, я рассмотрел все подобные вопросы по SO, но, похоже, ничего не работает.

У меня есть следующая форма

регистрация / new.html.erb

      <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
    <%= devise_error_messages! %>

    <%= f.fields_for :user_roles do |builder| %> 
      <%= builder.hidden_field :role_id, :value => @role.id %>
    <% end %>

Я переопределил контроллер регистрации, вот так

class Users::RegistrationsController < Devise::RegistrationsController
  prepend_before_filter :require_no_authentication, :only => [ :new, :create ]
  layout "public"

  def new 

    @user = User.new
    @user.user_roles.build()
    @role = Role.find_by_name("organiser")
    super
  end

Представление не отображает скрытую форму, если я удаляю переменную f, то отображаются поля для user_roles.

Я создаю экземпляр заполнителя user_roles в новом действии, но, похоже, это не имеет значения. Я установил accepts_nested_attributes_for :user_roles.

В любом случае, это сводит меня с ума, любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 10 марта 2012

Я решил проблему, но не уверен, почему она работает.(изменения окружены **)

в представлении, которое у меня есть

    <%= f.fields_for **:user_roles, @user_roles** do |builder| %> 
      <%= builder.hidden_field :role_id, :value => @role.id %>
    <% end %>

в моем контроллере регистрации устройств в новом действии, у меня есть

  def new 
    @user = User.new
    **@user_roles = [@user.user_roles.build ]**
    @role = Role.find_by_name("organiser")
    super
  end

Мое использованиеДело в следующем: я хочу, чтобы люди, которые регистрируются на сайте, были в роли организаторов, чтобы они могли добавлять других пользователей в систему в роли поставщиков или участников.Для обработки создания пользователей внутри приложения у меня есть контроллер пользователей, который позволяет организатору добавлять пользователя к определенной роли.

Код нового действия для users_controller:

  def new
    @user = @wedding.users.new
    @roles = @wedding.roles
    1.times{ @user.user_roles.build() }
  end

вложенная форма в users / new.html.haml:

    = f.fields_for :user_roles do |builder| 
      %p
        = f.label :roles
        = builder.select(:role_id, options_for_select(@roles.map {|role| [role.name, role.id]}))

проблема в том,этот код работает, и когда я пытался скопировать его в контроллер регистрации, он не работал.Я не могу понять, почему, любые предложения будут оценены.

Надеюсь, это полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...