0

質問があります。Deviseとmailboxerは問題なく私のrailsアプリにインストールされています。

問題は、「email」または「name」列を使用して、deviseユーザーをmailboxerに関連付ける必要があることです。明らかに、deviseにはUsersテーブルに「name」という列がありません。したがって、「電子メール」を使用すると、ユーザーには非表示にしたい他のすべての人の電子メールアドレスが表示されます。

ツイッターのような登録が欲しいです。彼らは決して変更されないunique_id(アカウント名)を持っています。それを達成するために、どうすればよいですか?

I.「unique_id」という名前の列をUsersテーブルに追加しますか?コマンド:rails g migration AddUniqueIdToUsers unique_id:stringを使用して移行ファイルを作成し、次のように開いて編集します

class AddUniqueIdToUsers < ActiveRecord::Migration  
   def change  
    add_column :users, :unique_id, :string  
    add_index :users, :unique_id,  :unique => true  
   end 
end

II。「unique_id」列を使用して、デバイスをメールボックスに関連付けるにはどうすればよいですか?

前もって感謝します

4

1 に答える 1

2

明らかに、デバイスにはユーザーテーブルに「名前」という列がありません

それは完全にあなた次第です。Devise が行う (またはしてもらいたい) のは、どのように機能するかを示すいくつかのレコードを追加することだけです。デバイス ジェネレーターを見ると、移行にいくつかの列を追加するだけであることがわかります。

ツイッター風に登録したい。彼らは決して変更されないunique_id(アカウント名)を持っています。それを達成するには、どうすればよいですか?

まず第一に、Rails では常に一意の ID が無料で提供されます (実際、データベース バックエンドを使用するほとんどの典型的な Web アプリケーションでは、各行に一意の ID があります)。

ただし、ユーザーにもユーザー名を選択させ、それも一意にする場合は、メールボックスの readme に記載nameされているように、 の使用法を のような独自のデータベース列で上書きすることができますusername

Mailboxer.setup do |config|
  # ...
  #Configures the methods needed by mailboxer
  config.email_method = :email
  config.name_method = :username
  # ...
end

または、メールボックス構成ファイルから離れたい場合は、単純にこれを使用alias_methodして実行できます (ユーザー名列がある場合):

class User < ActiveRecord::Base
  alias_method :name, :username
  acts_as_messageable
end

いずれにせよ、Devise は User モデルで使用する列を制限しません。また、Mailboxer も、gem を User モデルにアタッチするために使用する列を制限しないようです。そのため、この機能を自分で構築しなくても、必要なだけの柔軟性が得られます。

于 2012-06-21T10:21:30.537 に答える