안녕하세요, 다시 stackoverflow 커뮤니티!레일 3.1에서 중첩 된 등록 데이터와 Devise
저는 레일스에서 간단한 블로그 시스템을 작성하고 있으며, 인증 부분에 Devise를 사용하고 있습니다.
기본 이메일/비밀번호 등록을 받았는데, 이제는 사용자 테이블 (기본 사용자가 생성 한 기본 사용자 테이블)과 사용자 데이터 테이블 (예 : 사용자 이름)의 일대일 연결을 설정했습니다. , 사용 권한, about 등에 대한 정보를 제공합니다.
사용자 테이블은 100 % devines vanilla이고 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" %>
나는 시간과 시간에 대한 답변을 찾고 있지만 아무 소용이 없습니다. field_for 블록에서 의도적으로 "UserData"라는 단어의 철자를 잘못 입력하면 해당 필드가 인쇄됩니다. 이것은 이상하고, 그 필드가 사라지는 것을 전혀 모릅니다 ...
저는 약간의 도움에 감사드립니다! 시간 내 주셔서 감사합니다. :)
편집 1 + 2 :
몇 장난, 나는 무시했습니다 유증의 기본 등록 컨트롤러 후 내 자신을 만들었습니다. timbrandes 제안대로 내 사용자 지정 컨트롤러를 호출하는 devise 경로를 편집 한 있지만 내 컨트롤러에서 @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
덕분에이 작품 내 현재
registrations_controller.rb
입니다. 귀하의 제안을 시도했지만 불행히도 device의 등록 컨트롤러에서 @user에 액세스 할 수 없습니다. 자세한 내용과 컨트롤러 코드를 포함하도록 첫 번째 게시물을 업데이트했습니다. –OK, 그래서 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'로 바꾸었지만 username 필드의 이름은'name = "user [UserData_attributes] [name ] "', 오른쪽으로 보이지 않습니다 - 그것은'name ="user [UserData] [name] "'이 아니어야합니까? 이 양식을 제출하면 다음 경고가 발생합니다 : '경고 : 질량 속성을 지정할 수 없습니다 : UserData_attributes'. 이상한, 그 특정 분야가 어디에도 선언되어 있지 않기 때문에. (메인 포스트에서 모델을 업데이트했습니다) –