Здравствуйте, снова, сообщество stackoverflow!Вложенные регистрационные данные в Rails 3.1 с Devise
Я работаю над написанием простой системы блога в Rails, и я использую Devise для части аутентификации.
Я получил основную регистрацию по электронной почте/паролю, и теперь я настроил соединение «один к одному» таблицы пользователей (базовое, созданное при разработке) и таблицу UserData, содержащую такие вещи, как имя пользователя , разрешения, около, и так далее.
Это довольно просто - таблица пользователей на 100% придумала ваниль и has_one UserData. Userdata принадлежит пользователю.
Я попытался расширить форму регистрации, сгенерированную Devise, чтобы она позволяла пользователю вводить не только его адрес электронной почты и пароль, но также и его желаемое имя пользователя. Таким образом, когда форма будет отправлена, если имена полей формы будут правильными (правильная структура вложенных хэшей, таких как «электронная почта» для электронной почты пользователя, и «UserData [имя]» для желаемого пользователя имя), новый пользователь будет создан автоматически, и соответствующая соответствующая запись UserData должна также автоматически создаваться Rails, правильно?
Прямо сейчас, у меня огромный вопрос с [название] поле UserData не появляется на всех ... Вот файл У меня возникли проблемы с ...
new.html.erb
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div><%= f.label :email %><br />
<%= f.email_field :email %></div>
#This is the tidbit that doesn't work
<%= f.fields_for "UserData" do |ud_f| %>
<%= ud_f.label "username" %>
<%= ud_f.text_field :name %>
<% end %>
<div><%= f.label :password %><br />
<%= f.password_field :password %></div>
<div><%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation %></div>
<div><%= f.submit "Sign up" %></div>
<% end %>
<%= render :partial => "devise/shared/links" %>
Я искал ответ на часы и часы, но безрезультатно. Если я намеренно пропущу слово «UserData» в поле fields_for, он распечатает это поле. Это странно, и я понятия не имею, что заставляет это поле исчезнуть ...
Я очень благодарен за помощь! Спасибо за ваше время! :)
редактировать 1 + 2:
После регистрации по умолчанию контроллера несколько бездельничал, я ПЕРЕОПРЕДЕЛЕН Разрабатывают и создал мой собственный. Я отредактировал маршрут разработки, чтобы вызвать свой пользовательский контроллер, как предложил timbrandes, но я не могу получить доступ к @user в моем контроллере. Вот код, который я до сих пор ...
class RegistrationsController < Devise::RegistrationsController
def new
resource = build_resource({})
resource.UserData = UserData.new
respond_with resource
end
def create
logger.debug "\n\n\nIN CREATE\n\n\n\n"
logger.debug params.to_json
super
end
def update
super
end
end
спасибо за ответ. Я пробовал ваши предложения, но, к сожалению, я не могу получить доступ к @user в контроллере регистрации devise. Я обновил первое сообщение, чтобы содержать более подробную информацию и код контроллера. –
ОК, поэтому Devise занимается не с объектом @user или @admin, а с объектом, который они называют ресурсом. Таким образом, все не зависит от соответствующей модели и остается гибким. Попробуйте вызвать 'resource.user_data.build', но имейте в виду, что этот контроллер, вероятно, сломается, если у вас есть что-то другое, кроме вашего ресурса user. Обязательно прочтите этот код https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb - удачи :) –
Хм, это странно ... Я обновил модель , но 'resource.UserData.build' все еще вызывал ошибку, поэтому я переключился на' resource.UserData = UserData.new', который запустил форму, но поле имени пользователя было названо 'name = 'user [UserData_attributes] [name ] "', который выглядит не так, не должен ли он быть "name =" пользователем [UserData] [name] "'? Отправка этой формы вызывает следующее предупреждение: «ПРЕДУПРЕЖДЕНИЕ: нельзя назначать защищенные атрибуты: UserData_attributes'. Странно, так как у меня нет этого конкретного поля, объявленного где угодно. (обновите модель в главном сообщении) –