質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.36%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

29591閲覧

Ruby on Railsでform_forでエラー

vanhiro

総合スコア12

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

1グッド

5クリップ

投稿2015/09/26 04:46

編集2015/09/26 11:53

rails でツイッタークローンを作成し勉強中なのですが、viewファイルのform_for(@post)でエラーがでており解決ができません。

エラー文

ArgumentError in Users#show
views/shared/_post_form.html.erb where line #1 raised:
First argument in form cannot contain nil or be empty

###ソースコード
_post_form.html.erb

<%= form_for(@post) do |f| %> <% render 'shared/error_messages', object: f.object %> <div class="field"> <%= f.text_area :title, placeholder: "" %> <%= f.text_area :context, placeholder: "" %> </div> <%= f.submit "Post", class: "btn btn-primary" %> <% end %>

users_controller.rb

class UsersController < ApplicationController def show @user = User.find(params[:id]) @posts = @user.posts end def new @user = User.new end def create @user = User.new(user_params) if @user.save flash[:success] = "success!!" redirect_to @user else render 'new' end end private def user_params params.require(:user).permit(:name, :email, :password, :password_confirmation, :image) end end

show.html.erb

<div class="row"> <aside class="col-md-4"> <section class="user_info"> <h1> <% if @user.image? %> <%= image_tag @user.image.thumb.url %> <% else %> <%= image_tag 'noimage.gif' %> <% end %> <%= @user.name %> </h1> </section> </aside> <div class="col-md-8"> <% if @user.posts.any? %> <h3>Posts (<%= @user.posts.count %>)</h3> <ol class="posts"> <%= render @posts %> </ol> <% end %> </div> <div class="col-md-8"> <h3>投稿する</h3> <ol class="posts"> <%= render 'shared/post_form' %> </ol> </div> </div>

form_for(@post)の@postの中身がnil になっているというのはわかっているのですが、イマイチどこを直せばいいのかわかっておりません。

どなたかご教示いただけませんでしょうか?

Yuki-Naka👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rifuch

2015/09/26 10:54

app/view/user/show.html.erb(つまり_post_form.html.erbを呼び出しているファイル)のソースも見せてください
vanhiro

2015/09/26 11:54

追加させていただきました。ご確認お願いします。
guest

回答1

0

ベストアンサー

@postが生成されていないから、form_forのヘルパメソッドが動かせなくなっているようですね。
基本、form_forの引数にするオブジェクトはnilではいけないので、
コントローラのshowメソッドで、

Ruby

1@post = Post.new

とやっておくか、あるいはshared/_post_form.html.erbの最初で

HTML

1<% @post = Post.new unless @post %>

とやって、@postオブジェクトを生成してあげる必要があります。

投稿2015/09/26 14:26

rifuch

総合スコア1901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問