2011-12-18 8 views
0

写真をアップロードする機能を持つレールアプリに取り組んでいます。ユーザーが写真をアップロードすると、プロフィールに表示されます。写真が何も作成されていないときには、すべてがうまくいきます。写真がないため、ユーザープロフィールページを表示できません。ここRails 3オブジェクトがnilまたは作成されていない

は私のshowメソッドは、ここでusers_controller.rbに

def show 
@user = User.find_by_id(:id) 
@photo = @user.photos.find(params[:id]) 
end 

である私のshow.html.erbは、どのように私はこのエラーを回避することができます

<% for photo in @user.photos %> 
    <%= photo.title %> 
    <%= photo.description %> 
    <%= image_tag photo.image_url(:thumbnail) %> 
    <%= link_to "Show", photo %> 
<br> 
<% end %> 

のですか?

+0

'User.find_by_id(:id)'が間違っています。何をしようとしていますか? –

+0

プロファイルのuser_idでユーザーを検索します。私はレールのnoobです、これは私の最初のプロジェクトです。 – coletrain

答えて

1

あなたの行動のためのコードが間違っているようだ...

それはこのようになります。私はそれはあなたが望む何であるかわからないので、私は、目的に三行目をコメントアウト

def show 
    @user = User.find(params[:id]) 
    #@photo = @user.photos.find(params[:id]) 
end 

まだ、そこに行うこと。

@user変数これはUsersControllerためshow作用であるので、ユーザのIDがparams[:id]として通過することを考えると、params[:id]を使用して定義する必要があります。

しかし、その後、あなたが行くと、私を混乱させる何であるユーザーのための写真を見つけるために、これを使用... Photoレコードのid属性は、おそらくUserレコードのid属性と同じであることを行っていません。

だから何ですか?

+0

'@photo = @ user.photos.find(params [:id])を追加することでわかりました。ユーザーの表示ページに写真の表示を表示できました。上記のコードは、私が変更したコードです。また、それは魅力のように働いた! :) – coletrain

1

あなたはこれであなたのshow.html.erbのコードを置き換えることができます。

<% if @user.photos %> 
<% for photo in @user.photos %> 
    <%= photo.title %> 
    <%= photo.description %> 
    <%= image_tag photo.image_url(:thumbnail) %> 
    <%= link_to "Show", photo %> 
    <br> 
<% end %> 
<% end %> 

問題があり、ユーザーは任意の写真、@user.photos戻りnilを持っていないときには、まずそれをチェックする必要があります。

+0

上記のコードは、最初に投稿されたコードとどのように区別されますか? – coletrain

+0

私は 'if'条件を追加しました。 – Behrang

関連する問題