0

現在、メッセージ テーブルで Friendly_id を使用しています。メッセージは次のようにアクセスされます。

site.com/messages/id e.g. site.com/messages/8

次のように使用したいと思います。

site.come/messages/username e.g. site.com/messages/terrytibbs

メッセージテーブルの「body」属性でテストしたところ、gem が正常に動作しました。短いメッセージ「テスト」を送信し、site.com/messages/test を使用してアクセスしようとしたところ、正常に動作しました。

ただし、これを行うにはユーザーのユーザー名を使用する必要があります。ユーザー名がユーザーテーブルに保存されているため、別のモデル属性にアクセスする方法があるかどうか疑問に思っていました。メッセージテーブルにいつでもユーザー名列を作成し、そこにユーザー名を保存することができますが、既にユーザー名列がある場合に別のユーザー名列を持つという考えは好きではありません。

私のテーブルはリンクされているので、users テーブルの ID と一致する send_id または recipient_id を使用して、メッセージの送信者または受信者のユーザー名を簡単に見つけることができます。

やりたいことをすばやく簡単に行う方法はありますか?それとも、メッセージ テーブルにユーザー名列を作成する必要がありますか?

敬具

4

2 に答える 2

0

@sevenseacatは正しいですが、そのようにルートの競合が発生すると思います。

/messages/:id
/messages/:username

おそらく、ルートは/ user /:id / messagesのようになります。これは、ユーザーの下にあるメッセージのネストされたルートになります。

resources :users do
  resources :messages, only: [:index]
end

実行rake routesして、生成されたルートを確認します。あなたのMessagesControllerで、あなたは:user_idを受け取り、簡単に以下を呼び出すことができます:

User.find(params[:user_id]).messages

has_many :messagesユーザーモデルで作業していることを確認してください。

于 2013-02-02T14:17:29.450 に答える
0

これは意味がなく、 Friendly_id の目的ではありません-/messages/8メッセージの単一のインスタンスをロードしますが、それを で置き換えると、/messages/terrytibbsおそらくユーザー terrytibbs によって受信/送信されたメッセージのリストがロードされます.

messagesたとえば、の下に通常のコレクションルートを作成します。get :username次に、ユーザーをロードします->そのアクションでメッセージを取得します。

于 2013-02-02T14:08:51.427 に答える