2016-09-26 15 views
0

エラーメッセージをレンダリングすることはできませんが、私はこのエラーで終わる:助けになるとRailsは:私はモデルの検証から発生するエラーメッセージをレンダリングしようとしている

First argument in form cannot contain nil or be empty

うまくいけば、提供されたコードを...私は@commentの代わりにcommentを使用したときにロードするページを少なくとも取得することができましたが、実際のオブジェクトではなくシンボルだったため、エラーの部分をレンダリングする方法がわかりませんでした。オブジェクトのインスタンス変数に変更したので、エラーが発生します。

エラーメッセージ部分

<% if object.errors.any? %> 
    <div id="error_explanation"> 
    <div class="alert alert-danger"> 
     The form contains <%= pluralize(object.errors.count, "error") %> 
    </div> 
    <ul> 
     <% object.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
    </ul> 
    </div> 
<% end %> 

コメントフォーム

<%= form_for @comment, url: comments_path do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 
    <%= f.hidden_field :user_id, value: current_user.id %> 
    <%= f.hidden_field :post_id, value: post.id %> 
    <%= f.text_area :content, size: "60x2", placeholder: "Comment on this post..." %> 
    <%= f.submit "Comment" %> 

ビューからレンダリングされている場所なので、投稿フォーム

<%= form_for [@user, @post] do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 
    <%= f.text_area :content, size: "60x12", placeholder: "What do you want to say?" %> 
    <%= f.submit "Post" %> 
<% end %>  

class CommentsController < ApplicationController 
    def index 
    @comments = Comment.all 
    end 

    def new 
    @comment = Comment.new 
    @user = User.find(params[:user_id]) 
    end 

    def create 
    @user = current_user 
    #@post = Post.find(params[:post_id]) 
    @comment = @user.comments.build(comment_params) 

    if @comment.save 
     flash[:success] = "Comment Posted!" 
     redirect_back(fallback_location: root_path) 
    else 
     flash[:notice] = "Could not post comment" 
     redirect_back(fallback_location: root_path) 
    end 
    end 


    private 

    def comment_params 
    params.require(:comment).permit(:content, :user_id, :post_id) 
    end 
end 

class PostsController < ApplicationController 

    def index 
    @posts = Post.all 
    @user = User.find(params[:user_id]) 
    end 

    def new 
    @post = Post.new 
    @user = User.find(params[:user_id]) 
    end 

    def create 
    @post = current_user.posts.build(post_params) 
    if @post.save 
     flash[:success] = "Posted!" 
     redirect_to user_path(current_user) 
    else 
     flash[:notice] = "Post could not be submitted" 
     redirect_to users_path 
    end 
    end 

    private 

    def post_params 
    params.require(:post).permit(:content) 
    end 
end 
+0

'object:f.object?'これは間違いです。 'object:@ comment'、投稿:' object:@ post' – mrvncaragay

+0

私の投稿#indexアクションで@comment変数を宣言することで、ビューをレンダリングする場所になるので、それを取得できましたから –

答えて

0

私は私の記事の#インデックスアクションで@comment変数を宣言することによって、それを得ることができました

関連する問題