복붙노트

[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. ==============================

    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. ==============================

    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. ==============================

    3.가장 좋은 방법은 보석을 사용하는 것입니다.

    가장 좋은 방법은 보석을 사용하는 것입니다.

    쉬운 방법 : 비립종 보석

    하위 도메인 방법 : 아파트 보석

  4. from https://stackoverflow.com/questions/8305120/use-both-account-and-user-tables-with-devise by cc-by-sa and MIT license