[RUBY-ON-RAILS] 유증에 모두 계정 및 사용자 테이블을 사용하여
RUBY-ON-RAILS유증에 모두 계정 및 사용자 테이블을 사용하여
나는 레일 3.1.0과 고안 1.4.8 작업, 모두 새로운 오전 있어요.
나는 계정에 여러 사용자를 허용 할. 가입하는 첫 번째 사용자가 (아마 자신의 회사에 대한) 계정을 생성 한 후 사용자가 더 많은 사용자를 추가 할 수 있습니다. 사용자는 항상 정확히 하나 개의 계정에 연결되어 있습니다.
나는 사용자 및 계정 테이블이있다. 축약 모델 :
class User < ActiveRecord::Base
belongs_to :account
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:confirmable, :lockable, :timeoutable
attr_accessible :email, :password, :password_confirmation, :remember_me
end
class Account < ActiveRecord::Base
has_many :users, :dependent => :destroy
attr_accessible :name, :account_type
end
첫 번째 사용자의 징후가, 어떻게 계정 및 사용자 모두를 생성 할 때 문제는 무엇입니까?
해결법
-
==============================
1.마지막으로 중첩 된 속성을 사용하는 일이있어. 켄튼의 대답에 주석에서 설명하고있는 바와 같이, 그 예는 반전됩니다. 당신은 단지 시작하는 하나의 사용자를 만들 경우에도 - 당신은 계정 당 여러 사용자를 원하는 경우에, 당신은 먼저 사용자 계정을 생성해야합니다. 그런 다음 고안보기를 무시하고 자신의 계정 컨트롤러와 뷰를 작성합니다. 방금 직접 사용자를 작성하는 경우 등 확인 이메일을 보내기위한 유증 기능이 계속 작동하는 것 같다, 즉 기능이 고안 모델에서 자동적 인 물건의 일부가 될해야; 그것은 고안 컨트롤러를 사용이 필요하지 않습니다.
마지막으로 중첩 된 속성을 사용하는 일이있어. 켄튼의 대답에 주석에서 설명하고있는 바와 같이, 그 예는 반전됩니다. 당신은 단지 시작하는 하나의 사용자를 만들 경우에도 - 당신은 계정 당 여러 사용자를 원하는 경우에, 당신은 먼저 사용자 계정을 생성해야합니다. 그런 다음 고안보기를 무시하고 자신의 계정 컨트롤러와 뷰를 작성합니다. 방금 직접 사용자를 작성하는 경우 등 확인 이메일을 보내기위한 유증 기능이 계속 작동하는 것 같다, 즉 기능이 고안 모델에서 자동적 인 물건의 일부가 될해야; 그것은 고안 컨트롤러를 사용이 필요하지 않습니다.
관련 파일에서 발췌 :
응용 프로그램 / 모델에서 모델
class Account < ActiveRecord::Base has_many :users, :inverse_of => :account, :dependent => :destroy accepts_nested_attributes_for :users attr_accessible :name, :users_attributes end class User < ActiveRecord::Base belongs_to :account, :inverse_of => :users validates :account, :presence => true devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :confirmable, :lockable, :timeoutable attr_accessible :email, :password, :password_confirmation, :remember_me end
사양 / 모델 / account_spec.rb RSpec에 모델 테스트
it "should create account AND user through accepts_nested_attributes_for" do @AccountWithUser = { :name => "Test Account with User", :users_attributes => [ { :email => "user@example.com", :password => "testpass", :password_confirmation => "testpass" } ] } au = Account.create!(@AccountWithUser) au.id.should_not be_nil au.users[0].id.should_not be_nil au.users[0].account.should == au au.users[0].account_id.should == au.id end
설정 / routes.rb
resources :accounts, :only => [:index, :new, :create, :destroy]
컨트롤러 / accounts_controller.rb
class AccountsController < ApplicationController def new @account = Account.new @account.users.build # build a blank user or the child form won't display end def create @account = Account.new(params[:account]) if @account.save flash[:success] = "Account created" redirect_to accounts_path else render 'new' end end end
뷰 / 계정 / new.html.erb보기
<h2>Create Account</h2> <%= form_for(@account) do |f| %> <%= render 'shared/error_messages', :object => f.object %> <div class="field"> <%= f.label :name %><br /> <%= f.text_field :name %> </div> <%= f.fields_for :users do |user_form| %> <div class="field"><%= user_form.label :email %><br /> <%= user_form.email_field :email %></div> <div class="field"><%= user_form.label :password %><br /> <%= user_form.password_field :password %></div> <div class="field"><%= user_form.label :password_confirmation %><br /> <%= user_form.password_field :password_confirmation %></div> <% end %> <div class="actions"> <%= f.submit "Create account" %> </div> <% end %>
레일 복수 대 단수에 대한 매우 까다 롭고입니다. 우리는 계정 has_many 사용자 말 이후 :
-
==============================
2.이러한 RailsCasts 덮여 있는지 같은 것을 사용 할 수 없습니다?
이러한 RailsCasts 덮여 있는지 같은 것을 사용 할 수 없습니다?
http://railscasts.com/episodes/196-nested-model-form-part-1
http://railscasts.com/episodes/197-nested-model-form-part-2
당신은 accepts_nested_attributes_for를 사용하는 스크린 캐스트에 설명 된대로 모델을 설정 할 수있다.
그런 다음 뷰 / 궁리 / 등록 / new.html.erb 양식이 될 것이다 : 정상과 같은 사용자와의 중첩 된 형태로 포함 할 수 있습니다 : 계정을.
그 기본 양식에서이 같은 그래서 :
<%= f.fields_for :account do |account_form| %> <div> <p> <%= account_form.label :name, "Account Name", :class => "label" %> <%= account_form.text_field :name, :class => "text_field" %> <span class="description">(e.g., enter your account name here)</span> </p> </div> <div> <p> <%= account_form.label :company, "Company Name", :class => "label" %> <%= account_form.text_field :company, :class => "text_field" %> </p> </div> <% end %>
이것은 내가 일하고 있어요 및 앱에서 사용하는 헬퍼가 다를 수 있습니다 그래서는 simple_form 보석을 사용하고 응용 프로그램의 샘플 코드,하지만 당신은 아마 아이디어를 얻을 수 있습니다.
사용자가 생성 될 때 (그들은 등록 할 때) 그래서, 그들은 또한 그들이 "회원 가입"버튼을 누르면 한 번 자신의 계정을 만들 계정 모델에 사용합니다 .. 정보를 입력 할 수 있습니다.
그리고 당신은 다른 사용자도 액세스 할 수 있지만 초기 사용자가 회사에 "admin"사용자 될 것 같은 "관리자"너무 ... 소리 같은 해당 사용자에 대한 속성을 설정할 수 있습니다.
희망이 도움이.
-
==============================
3.가장 좋은 방법은 보석을 사용하는 것입니다.
가장 좋은 방법은 보석을 사용하는 것입니다.
쉬운 방법 : 비립종 보석
하위 도메인 방법 : 아파트 보석
from https://stackoverflow.com/questions/8305120/use-both-account-and-user-tables-with-devise by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 3.1 자산 레일 - 이상한은 개발에서 봉사 (0) | 2020.02.29 |
---|---|
[RUBY-ON-RAILS] 4 LIKE 쿼리를 레일 - 액티브 따옴표를 추가 (0) | 2020.02.29 |
[RUBY-ON-RAILS] 레일의 동적 오류 페이지 3 (0) | 2020.02.29 |
[RUBY-ON-RAILS] 레일 4.0에서 고안에 새로운 필드를 추가 허가되지 않은 매개 변수 (0) | 2020.02.29 |
[RUBY-ON-RAILS] 루비 레일에 4 응용 프로그램이있는 iframe하지 작업을 수행 (0) | 2020.02.29 |