2011-11-02 4 views
4

인증을 위해 devise를 사용하고 있습니다. 가입 페이지에 'organization'텍스트 필드가 있으므로 사용자가 가입하면 조직이 만들어져 사용자가되기를 원합니다. (사용자 모델은 organization_id 속성을 가짐). 나는 장치보기를 만들고 조직 이름에 fields_for를 추가했습니다. 내 모델에는 사용자 belongs_to : 조직 및 조직 has_many : 사용자 (조직과 관련된 사용자가 두 명 이상 있습니다)가 있습니다. 컨트롤러를 수정하지 않고도이 작업을 수행 할 수있는 모든 방법을 찾았지만 운이 없었습니다. 당신이 가리킬 수있는 곳에서 구현 한 샘플 앱이 없다면 컨트롤러를 수정하지 않고이 작업을 제안하지 마십시오. 여기에 배치 될 때Devise : 사용자 belongs_to organization

나는 등록 컨트롤러를 만들었습니다 Override devise registrations controller

난 그냥 컨트롤러에 몇 풋 문을 던졌다, 그리고 그것이 내가처럼 보이는, 그래서 나는 그 콘솔에 표시되는 표시되지 않습니다 이 컨트롤러에 연결되지 않았습니다.

내 뷰를 app/view/devise/registrations에서 app/views/registrations로 복사 한 후 내 뷰 이 (가)이 우주에서 온 것처럼 보입니다! 내가 만든 조직 필드가 더 이상 표시되지 않으며보기가로드되는 위치를 알 수없는 것처럼 보입니다.

더 간결하지 않아서 불편을 끼쳐 드려 죄송 합니다만, 어디로 갈 지 잘 모르겠습니다. 당신은 당신의 사용자 모델에서 accepts_nested_attributes_for을 사용할 수 있습니다

+2

전망은 외부 공간에서 오는 것이 아니라 장치 보석에서 오는 것입니다. 내가 생각하기에 편집 한보기를 생성하려면 생성기를 실행해야합니다. 그러나 작성되지 않은 경우 보석의보기가 대신 사용됩니다. 당신의 주요 질문에 관해서, 당신은 fields_for를 사용했다고 말합니다 - 사용자는 accepts_nested_attributes_for를 가지고 있습니까? – chrispanda

+0

고맙습니다! 이제 내가보기가 어디에서 왔는지 알 수 있습니다. – Lumbee

답변

7

(documentation)

그것은과 같아야합니다

<input type="text" name="user[organization_attributes][name]"> 

<% user = User.new(organization => Organization.new) %> 
<%= form_for user do |form| %> 
    <%= form.fields_for user.organization do |organization_form| %> 
    <%= organization_form.text_field :name %> 
    <% end %> 
<% end %> 
: 당신이 레일 도우미를 사용하거나 손으로 필드를 만들 수있는 뷰에서

class User < ActiveRecord::Base 
    belongs_to :organization 
    accepts_nested_attributes_for :organization 
end 

class Organization < ActiveRecord::Base 
    has_many :users 
end 

편집 : 당신의 장치보기는 다음과 같아야합니다 :

<h2>Sign up</h2> 
<% resource.organization ||= Organization.new %> 
<%= 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> 

    <%= f.fields_for resource.organization do |organization_form| %> 
    <div><%= organization_form.label :name %><br /> 
    <%= organization_form.text_field :name %></div> 
    <% 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" %> 
+0

안녕하세요, 내가보기에 노력하고있는 곳입니다. https://gist.github.com/1335581 NoMethodError in Devise/registrations # new /home/jlocklear/railsApps/devise/app/views/devise/registrations/new.html.erb where line # 11 raised : # <# 클래스 : 0xb650452c>에 대한 정의되지 않은 메소드 추출 된 소스 (라인 11 주위) : ... 11 : \t <% = form_for user do | form | %> – Lumbee

+0

어떻게하는지 보여주는 예였습니다. 또한 Devise 뷰가 어떻게 보일 것인가를 추가했습니다. –

+0

안녕 마렉. 나는 이것을 시험해 보았다. 그리고 아직도 어떤 시가도 가지지 않고 있었다! 여기에 내가 콘솔에서보고있는 것이있다. 127.0.0.1에서 POST를 시작했습니다. 2011-11-03 08:53:20 -0400 ..., "user"=> { "email"=> "[email protected]", "organization" => "가입"=> "가입"} 경고 : 할 수 있습니다. => { "name"=> "test"}, "password"=> "[FILTERED]", "password_confirmation"=> "[FILTERED] 보호 된 속성을 대량 할당 : 조직 경고에 유의하십시오. 나는 attr_accessible : 조직을 추가하려했지만 행동에는 변화가 없었다. – Lumbee