2015-10-16 116 views
2

我需要設計和使用多個模型的選項的幫助。Rails設計 - 多個模型

目前,我得到了一個用戶模型和客戶模型,該模型是一個命名空間內:

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :recoverable, :registerable, :rememberable, :trackable, :validatable 
end 

class Test::Client < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 
end 

正如你可以看到,我包括設計在兩個模型。就像它在doc ..

所以看看我路線

devise_for :users, controllers: {passwords: 'passwords', 
           sessions: 'sessions'} 

devise_for :clients, class_name: 'Test::Client', controllers: {sessions: 'test/sessions'} 

我現在的問題是,當我創建一個登錄表單我客戶型號:

<%= form_for(resource, as: resource_name, url: client_session_path(resource_name), html: {class: ''}) do |f| %> 
<% end %> 

它具有以下網址:/clients/sign_in.client

這是什麼。客戶端?它讓我瘋狂。當你需要更多的信息,讓我知道..

編輯1:

我現在編輯我的模型結構。

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :recoverable, :registerable, :rememberable, :trackable, :validatable 
end 

class Test::Client < User 
    # some Client only functions 
end 

因此,作爲普通用戶的登錄工作。但客戶登錄仍然沒有。在我看來,我這樣做:

<%= form_for(Test::Client.new, as: :client, url: session_path(:client) 

當我輸入我的憑據我重定向到「/用戶/ sign_in」,但沒有別的happend。在我的日誌我有一個過濾器條目:

Filter chain halted as :require_no_authentication rendered or redirected 
+0

爲什麼不STI? 'class Test :: Client

+0

@huanson我已經試過了。但後來我得到的問題,對象總是輸入*用戶*,但我需要*客戶端*方法等 – Zero

+0

你好,你仍然有用戶和測試::客戶端和客戶端,你可以擴展一切。但仍然只是一個登錄和1路由 –

回答

1

回答原來的問題
在我的應用程序

<%= user_session_path(resource_name) %> 
# Output 
/users/sign_in.user 
# In this example; the `resource_name` is redundant 

<%= user_session_path %> 
# no need to pass arg is your are surely gonna use `user` as the resource 
# Output 
/users/sign_in 

<%= session_path(:user) %> 
# Output 
/users/sign_in 

存在色器件定義根據資源來確定sign_in_url一個輔助方法;

這是什麼.client? Ans:client是您爲devise定義的資源的名稱;在你的情況下有兩個資源;

如果您將針對不同的資源使用不同的視圖模板,請使用以下內容;

<%= form_for(resource, as: resource_name, url: client_session_path, html: {class: ''}) do |f| %> 
<% end %> 

如果要共享視圖模板;使用

<%= form_for(resource, as: resource_name, url: session_path(resource_name), html: {class: ''}) do |f| %> 
<% end %> 

FYI:

[8] pry(main)> app.members_path 
=> "/members" 
[9] pry(main)> app.leads_path(2) 
=> "/leads.2" 
[10] pry(main)> app.lead_path(2) 
=> "/leads/2" 
+0

感謝您的回答。我現在可以登錄,但我無法訪問用戶。 Current_user是空的。當我嘗試登錄消息「你已經登錄」出現。 – Zero

+0

怎麼來了;如果您登錄,則必須設置'current_user';可以分享您的錯誤日誌請 – illusionist

+0

哦;因爲你正在使用'client'資源;不設置'current_user';嘗試'current_client' – illusionist