0

ユーザー アカウントの種類が異なるいくつかのモデルがあります。つまり、ユーザー モデル、管理者モデル、ゲスト モデルです。

作成中のアプリケーションの一部としてフォーラムを作成しようとしています。投稿が作成されると、user_type 属性が投稿を作成したユーザーのタイプに設定されます。私がやりたいことはかなり単純なことのようですが、うまくいかないようです。基本的に、投稿を作成した人のユーザー名を取得したい。いくつかの異なるモデルがあるため、post.user.username のようなものを使用することはできず、if ステートメントで醜いことをする必要はありません。より良い方法はありますか? これは、私が達成しようとしていることを示している可能性があります (ただし、これは機能しません)。

created by:<%= post.#{user_type}.username %>

次に、関連するコードに出力されます。

post.user.username
or post.admin.username
or post.guest.username

ありがとう!

4

1 に答える 1

0

おそらくあなたの最善の行動方針

class Post < ActiveRecord::Base
  ...
  def username
    [user,admin,guest].find(&:present?).try(:username)
  end
end

これをモデルに貼り付けたり、デコレータに追加したりできます。

これで、ビューでこれを行うことができます:

created by:<%= post.username %>

findに最初に応答したものを取得しますpresent?。つまり、最初に nil でないものを見つけます。次に、usernameそのメソッドが返すものは何でも呼び出そうとします。この投稿に 、useradminまたはがない場合、メソッドは を返します。guestnil

于 2013-09-28T16:15:09.907 に答える