0

RoR 신입 회원이며 레일을 사용 중입니다. 3.2.3.루비 온 레일즈 (Ruby on Rails) - 확인 가능함

나는 장치를 사용해 왔지만 지금까지는 큰 문제 였지만 문제가 발생했습니다.

나는 User 테이블을 갖고 있으며 역할 테이블과 HABTM 연결을 가지고 있습니다. 나는 조인 테이블을 만들고 모든 것이 좋습니다. 사용자를 생성하고 역할을 선택할 때 조인 테이블에 데이터를 올바르게 작성합니다.

그러나 나는 'confirmable 옵션을 활성화 시켰으며 모든 것이 잘못되기 시작했습니다. 새 사용자를 만들 때 은 더 이상 조인 테이블에 레코드를 삽입하지 않습니다.

는 내 말은, 모든 나는 완료 문학은 :database_authenticatable, :recoverable, :rememberable, :trackable:validatable 같은 다른 유증 옵션 앞에 , :confirmable를 추가했다있다. 그와 아무 잘못,

class AddConfirmableToDeviseV < ActiveRecord::Migration 
def change 
    change_table(:users) do |t| 
     t.confirmable 
    end 
    add_index :users, :confirmation_token, :unique => true 
    end 
end 

그것은 확인하기 위해 링크를 이메일을 보내지 만, 나는 그것을 클릭 할 때 : 나는 :confirmable을 활성화되면

나는 (나는 또한 스택 오버 플로우에서 본)이 마이그레이션을 썼다 앱은 사용자에게 할당 된 역할이 없으므로 중단되며 이는 필수 사항입니다.

내가 말했듯이 내가 한 모든 것은 :confirmable입니다. 내 사용자 모델에 #,:confirmable과 같이 주석 처리하면 의 역할과 사용자 데이터가 조인 테이블에 올바르게 삽입됩니다.

무슨 일 이니? 어떤 팁? 사전에

감사합니다,

감사

업데이트

@Kyle C

나는 정규 작업을 사용자 만드는거야 :

보기 :

<div class="field"> 
    <%= f.label :username %><br /> 
    <%= f.text_field :username %> 
</div> 
(...) 

<% for role in Role.find(:all) %> 
    <div class="field"> 
    <%= check_box_tag "user[role_ids][]", role.id, @user.roles.include?(role) %> 
    <%= role.name %> 
    </div> 
<%end%> 
을 그럼 내 컨트롤러

:

def create 

@user = User.new(params[:user])  

respond_to do |format| 
    if @user.save 
    format.html { redirect_to(@user, :notice => 'User was successfully created.') } 
    (...) 

:confirmable없이,이 조인 테이블에 데이터를 입력하기에 충분하다. 이 위에

, 나는 내 응용 프로그램 컨트롤러이있다 :이 꺼내 경우

def after_sign_in_path_for(resource) 

if current_user.roles.first.id == 1 
    admin_dashboard_path 
elsif current_user.roles.first.id == 2 
    manage_path 
end 

end 

, 사용자는 자신이 확인 메일, 그러나을 클릭하면 로그인됩니다, 중간 테이블을 조인 여전히 협회를 얻지 못합니다.

나는 (https://github.com/plataformatec/devise/blob/master/lib/devise/models/confirmable.rb) 설명서를 열람했지만 아직 신참이며 내 응용 프로그램의 초기 동작을 무시할만한 것을 찾지 못했습니다.

사용자를 만든 후 내 조인 테이블에서 레코드를 강제로 입력하는 방법이 있습니까?

나는이 시도했다 :

def create 

@user = User.new(params[:user]) 
@role = Role.find(params[:user][:role_ids]) 

if @user.save 
@user.role << @role 
@user.save 

AND (잘못된 일을 할 수 있지만 아직 성공하지)

(...) 
if @user.save 
query = ActiveRecord::Base.connection.raw_connection.prepare("INSERT INTO roles_users (role_id, user_id) VALUES (?,?);") 
query.execute(@role.id, @user.id) 
query.close 

이 정말 실망 :confirmable을 활성화 할 때, 다른 사람이이 문제를 함께했다 HABTM과 함께?

+0

확인이 [답] (http://stackoverflow.com/questions/11954270/devise-를 사용하십시오 지원되는 모든 도움을

감사합니다 install-from-existing-model-database) 똑같은 문제. 수표 2.0 문서를 확인하십시오. –

+0

나는 (unconfirmed_email을 제외하고)이 작업을 수행했으나 내 join 테이블의 역할 (users_role)은 아직 생성되지 않았다. 뭐가 될수 있었는지? – Silver

답변

1

t.confirmable 더 이상이 이동

## Confirmable 
    # t.string :confirmation_token 
    # t.datetime :confirmed_at 
    # t.datetime :confirmation_sent_at 
    # t.string :unconfirmed_email 
+0

나는 (unconfirmed_email을 제외하고)이 작업을 수행했으나 내 join 테이블의 역할 (users_role)은 아직 생성되지 않았다. 뭐가 될수 있었는지? – Silver

+0

사용자에게 역할을 어떻게 추가하고 있습니까? after_create 콜백에 있습니까? 코드를 게시하십시오 –

+0

코드로 업데이트 된 질문입니다. – Silver

관련 문제