0

Rails アプリケーションで認証にデバイスを使用しています。現在、私は2つのモデルを持っています:

Users
Accounts

アカウントはユーザーに属し、ユーザーは 1 つのアカウントを持ちます。

私のアカウント モデルには、名前とサブドメインが含まれています。私のユーザー モデルには電子メールとパスワードがあります

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

ただし、名前とサブドメインは表示されません。それらを表示するにはどうすればよいですか?

4

2 に答える 2

1

あなたの見解でこれを試しましたか:

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

また、アカウント モデルに user_id を正しく含めましたか?

特にそのヘルパーについて本当に心配する必要があるかどうかはわかりません。ヘルパー メソッドを掘り下げる前に、まず基本的な作業を行います。

于 2012-12-04T22:11:00.330 に答える
0

ユーザーが1つのアカウントを持っている場合、(ユーザーモデルで)次のようにモデルで言及する必要があると思います:

has_one :account

および Accounts モデルでは:

belongs_to :user

これにより、データベース accounts に user_id という名前の列が作成されます (ただし、既存のモデルを編集している場合は、移行によって追加してから、db:migrate をレーキする必要があります)。次に、名前とサブドメインを抽出するヘルパーで、次のように呼び出すことができます。

@current_account = current_user.account

ユーザー インターフェイスを通じて user_id を割り当てる場合は注意が必要です。アカウント モデルに以下を含める必要があります。

attr_accessible :user_id 

編集: 実際、has_one と belongs_to を含むモデルのレコードを作成するには、関連付けが必要です。関連付けによるレコードの作成の詳細については、こちらを参照してくださいRails のネストされたリソースについて読むことを検討してください。非常に役立つ記事です。トピック に関する別の興味深い議論があります。

于 2012-12-04T18:32:24.010 に答える