2016-12-09 9 views
1

説明:私はtoy_appチュートリアル以下のい:のコンテンツを表示する編集、ユーザショーのページ:https://www.railstutorial.org/book/toy_appRuby on Rails Associationの使い方は?

を私はセクションの下で練習の質問と問題2.3.3

質問を持っていますユーザの最初のマイクロポスト。 (ファイル1.1の他の内容に基づいて構文を推測するには、技術的な高度化(ボックス1.1)を使用してください。/ users/1にアクセスして確認してください。

私のの中にapp/views/users/show.html.erbファイルがあります。 @ micropost.contentオブジェクトを使用して、ユーザーに関連付けられたコンテンツを表示しようとしました。ユーザー#で

<p id="notice"><%= notice %></p> 

<p> 
    <strong>Name:</strong> 
    <%= @user.name %> 
</p> 

<p> 
    <strong>Email:</strong> 
    <%= @user.email %> 
</p> 

<p> 
    <strong>Content:</strong> 
    <%= (<%= @micropost.content %>) %> 
</p> 


<%= link_to 'Edit', edit_user_path(@user) %> | 
<%= link_to 'Back', users_path %> 

結果

NoMethodErrorは皆無のため

未定義のメソッド 'コンテンツ' を示していますNilClass

結論

の投稿/ビュー/ユーザーの投稿にのフォームを作成する必要がありますか?または、:コンテンツを私のmicroposts_controller.rb内のプライベート 'micropost_params'メソッド内のオブジェクトに設定しているので、コントローラ間のオブジェクトデータ転送が許可されません。

私は連想が働いていることを確認するために、コンソール内のコードの次の行をテストし

first_user = User.first 
first_user.microposts 
micropost = first_user.microposts.first 
micropost.user 

私は私へのアクセスを提供します私のユーザコントローラファイル内のメソッドを定義する必要があると感じて:内のコンテンツオブジェクト私のMicroPostsクラス。

+1

コントローラの 'show'メソッドに' @micropost'変数を設定していますか? –

+1

これは、 '@ user.micropost.content'でなければなりません。コントローラ内で' @micropost = User.first.microposts'をエクスポートし、ビューで配列を処理してください。 – joaumg

+0

@joaumg:実際にはどちらも動作しません。それは別のものでなければなりません:) –

答えて

1

showのアクションは、次のようになります。

def show 
    @user = User.find(params[:id]) 
    @micropost = @user.microposts.first 
end 

ここで、ビューでは、@micropost.contentを使用してマイクロポストのコンテンツにアクセスできます。ユーザーにマイクロポストが関連付けられていない場合(マイクロポストが作成されていない場合)はどうなりますか?その場合、@user.microposts.firstnilになります。私が何を意味するかわからない場合は、レールコンソールでそれを試してみてください。

<% if @micropost %> 
    <%= @micropost.content %> 
<% else %> 
    <p> User has no microposts </p> 
<% end %> 
+0

Arunさん、ありがとうございました。あなたの助けに感謝! –

+0

ありがとうArun!知識を評価してください。 –

+0

@RyanAndersonよろしくお願いします。私は喜んで助けてくれました。 –