我在我的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
我需要在用户登录后从帐户中获取名称和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 %>
但是,名称和子域名不显示。如何让它们显示?
答案 0 :(得分:1)
您是否在视图中尝试过此操作:
<%= current_user.account.name %>
<%= current_user.account.subdomain %>
您是否正确地将user_id包含在帐户模型中?
不确定你真的需要担心这个助手。在深入研究辅助方法之前,先了解基础知识。
答案 1 :(得分:0)
我认为如果用户有一个帐户,则应该在模型中提及,例如(在用户模型中):
has_one :account
并在帐户模型中:
belongs_to :user
这将在数据库帐户中创建一个名为user_id的列(但如果您正在编辑现有模型,则应通过迁移添加它,然后再进行db:migrate)。然后在帮助程序中,您可以在其中提取名称和子域名,您可以调用:
@current_account = current_user.account
如果您通过用户界面分配user_id,请注意,您应该包含在您的帐户模型中:
attr_accessible :user_id
编辑:事实上,为包含has_one和belongs_to的模型创建记录需要关联。有关通过关联创建记录的更多信息,您可以read here。您可以考虑阅读nested resources in Rails,这是非常有用的文章。这是关于主题的另一个interesting discussion。