簡體   English   中英

Rails設計:user_signed_in? 和current_account

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM