0

「ユーザー」にアバターがない場合、if-elseを使用してデフォルトの画像(ユーザーのアバター)をレンダリングしようとしています。(これは、気のめいるような missing.png 画像を避けるためです)。しかし、これまでのところ機能していません。

これが私のビューです(view.html.hamlファイル):

...
.user_avatar
 -img_path = defined?(@user.avatar.url) ? "@{user.avatar.default_url}" : "@user.avatar.url"
 %img{:src => img_path}
...

これが私のモデルです:

...
attr_accessible :name, :avatar

has_attached_file :avatar :default_url => "assets/images/default_icon.png"
...

タグで使用@user.avatar.icon.urlすると機能することに注意してください。img

4

3 に答える 3

1

問題は、コードを評価するのではなく、文字列を生成するだけであることです。あなたがするとき:

"@{user.avatar.default_url}"

まさにその文字列を取得しています。おそらくあなたがするつもりだったのは:

@user.avatar.default_url

文字列としてではありません。このようにして、実際に評価されます。についても同様です"@user.avatar.url"

編集

変化する:

-img_path = defined?(@user.avatar.url) ? @user.avatar.default_url : @user.avatar.url

に:

-img_path = defined?(@user.avatar.url) ? @user.avatar.url : @user.avatar.default_url

つまり、ユーザーが定義済みのアバター URL を持っている場合はそれを使用し、そうでない場合はデフォルトの URL を使用します。

User#avatar_urlまた、このif/elseロジック自体を実行できるのようなユーザーのメソッドにこれを投入することを検討してください。

于 2013-02-25T17:26:48.570 に答える
0

まず、デフォルトの画像へのURLが正しいことを確認してください。画像がapp/assets/imagesフォルダ内にある場合はdefault_icon.png、URLとして十分です。

次に、%imgタグを手動で書き込む代わりに、ヘルパーの使用を検討してください。

= image_tag @user.avatar.url

第三に、今はテストできませんがdefault_url、ペーパークリップでinを定義するポイントは@user.avatar.url、アバターがない場合に自動的に呼び出してデフォルトのURLを返すことができるようにすることだと確信しています。

言い換えれば、あなたの提案のようにそれを行うことは、目的をやや打ち負かします。

私の5セントは、あなたが提供した画像のURLが間違っていて、正しいURLを取得したら、上記の私のコードで十分だということです。

于 2013-02-25T19:45:53.223 に答える
0

あなたが求めているのは次のとおりだと思います:

.user_avatar
 -img_path = defined?(@user.avatar.url) ? @user.avatar.url : @user.avatar.default_url
 %img{:src => img_path}
于 2013-02-25T17:45:10.227 に答える