0

我在我的 Rails 应用程序中使用设计进行身份验证。目前我有两个模型:

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 %>

但是,名称和子域不显示。我怎样才能让它们显示?

4

2 回答 2

1

您是否在您的观点中尝试过:

 <%= current_user.account.name %>
 <%= current_user.account.subdomain %>

您是否正确地将 user_id 包含在帐户模型中?

不确定您是否真的需要特别担心那个助手。在深入研究辅助方法之前,先了解基础知识。

于 2012-12-04T22:11:00.330 回答
0

我认为如果用户有一个帐户,则应在模型中提及,例如(在用户模型中):

has_one :account

在 Accounts 模型中:

belongs_to :user

这会在数据库帐户中创建一个名为 user_id 的列(但如果您正在编辑现有模型,则应通过迁移添加它,然后 rake db:migrate)。然后在帮助程序中,您可以在其中提取名称和子域,您可以调用:

@current_account = current_user.account

如果您通过用户界面分配 user_id 时要小心,您应该在您的 Account 模型中包含:

attr_accessible :user_id 

编辑: 事实上,为模型创建记录,包含 has_one 和 belongs_to,需要关联。有关通过关联创建记录的更多信息,您可以在此处阅读。您可以考虑阅读有关Rails 中的嵌套资源的文章,这是一篇非常有用的文章。这是关于 topic 的另一个有趣的讨论

于 2012-12-04T18:32:24.010 回答