[英]Rails devise: user_signed_in? and current_account
我在Rails應用程序中使用devise進行身份驗證。 目前,我有兩種型號:
Users
Accounts
帳戶屬於用戶,用戶擁有一個帳戶。
我的帳戶模型包括一個名稱和一個子域。 我的用戶模型包含電子郵件和密碼
在account.rb中,我有:
class Account < ActiveRecord::Base
attr_accessible :name, :subdomain
belongs_to :user
end
並在user.rb中:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :Trackable
attr_accessible :email, :password, :password_confirmation, :account_attributes, :account
has_one :account
end
用戶登錄后,我需要從Account獲取名稱和sudbomain等。
在我的application_controller.rb中,我有:
def after_sign_in_path_for(resource)
if resource.is_a?(User)
user_path
else
super
end
end
def current_account
@iduser = session[:user_id]
@current_account ||= Account.find(@iduser) if @iduser
end
helper_method :current_account
並在layout.html.erb中
<% if current_account %>
<%= current_account.name %> <%= current_account.subdomain %>
<% end %>
<% if user_signed_in? %>
|
<%= link_to destroy_user_session_path, :class => "btn btn-mini btn-danger", :method => :delete do %>
<i class="icon-off icon-white"></i> logout
<% end %>
<% end %>
但是,名稱和子域不顯示。 如何顯示它們?
您是否嘗試過以下方法:
<%= current_user.account.name %>
<%= current_user.account.subdomain %>
您是否已將user_id正確包含在帳戶模型中?
不確定您是否真的需要特別擔心該助手。 在研究輔助方法之前,請先使基礎知識起作用。
我認為如果User有一個帳戶,則應在模型中提及,例如(在User模型中):
has_one :account
並在“帳戶”模型中:
belongs_to :user
這將在數據庫帳戶中創建一個名為user_id的列(但是,如果您正在編輯現有模型,則應通過遷移添加它,然后傾斜db:migrate)。 然后在幫助器中,您可以在其中提取名稱和子域:
@current_account = current_user.account
如果要通過用戶界面分配user_id,請務必將其包括在Account模型中:
attr_accessible :user_id
編輯:實際上,為包含has_one和belongs_to的模型創建記錄需要關聯。 您可以在此處閱讀有關通過記錄創建關聯的更多信息。 您可以考慮閱讀有關Rails中的嵌套資源的知識 ,這是非常有用的文章。 這是關於主題的另一個有趣的討論 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.