2014-12-17 6 views
0

Я создаю приложение, в котором пользователи могут комментировать сообщения. Тем не менее, я получаю сообщение об ошибке при попытке показать сообщения: ArgumentError in PostsController#show First argument in form cannot contain nil or be emptyRuby on Rails error: undefined method `comments_path '

Это провал на линии, где я пытаюсь render 'shared/comment_form'

Вот мой сообщений/show.html.erb:

<% provide(:title, @post.title) %> 
    <div class="post-details"> 
    <div class="post-title">@post.title</div> 
    <div class="post-url">@post.url</div> 
    <div class="post-content">@post.content</div> 
    <%= render 'shared/comment_form' if logged_in? %> 
    <% if @post.comments.any? %> 
     <h3>Comments</h3> 
     <ol class="comments"> 
     <%= render @comments %> 
     </ol> 
    <% end %> 
    </div> 

и мой posts_controller.rb:

класс PostsController < ApplicationController before_action: logged_in_user, только: [: создание,: уничтожить]

def create 
    @post = current_user.posts.build(post_params) 
    if @post.save 
    flash[:success] = "Post created!" 
    redirect_to root_url 
    else 
    @feed_items = [] 
    render 'static_pages/home' 
    end 
end 

def show 
    @post = Post.find(params[:id]) 
end 

private 

    def post_params 
    params.require(:post).permit(:title, :url) 
    end 
end 

А вот мой общий/_comment_form.html.erb парциальное:

<%= form_for(Comment.new) do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 
    <div class="field"> 
     <%= f.text_area :content, placeholder: "Compose new comment..." %> 
</div> 
<%= f.submit "Post", class: "btn btn-primary" %> 
<% end %> 

И мой comments_controller.rb:

class CommentsController < ApplicationController 

    before_action :logged_in_user, only: [:create, :destroy] 

def create 
    @comment = current_user.comments.build(comment_params) 
    if @comment.save 
    flash[:success] = "Comment created!" 
    redirect_to request.referrer || root_url 
    else 
    render 'new' 
    end 
end 

def new 
    @comment = Comment.new 
end 

def destroy 
    @comment.destroy 
    flash[:success] = "Comment deleted" 
    redirect_to request.referrer || root_url 
end 

private 

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

в сторону: Я знаю, что его не принято использовать Comment.new в моем form_for - У меня также есть проблема с этим, но я хотел бы решить одну проблему за раз (если они так или иначе не задействованы)

ответ

2

Я подозреваю, что у вас нет записи в вашем config/Файл route.rb для комментариев, то есть:

resources :comments 
+0

Это правда - и важный надзор! но теперь я получаю сообщение об ошибке «« nil »не является объектом, совместимым с ActiveModel. Он должен реализовать: to_partial_path« –

+0

Хорошо ... Я думаю, теперь проблема в том, что эта строка '<% = render @comments%> 'должен быть' <% = render @ post.comments%> ' – keyzee

+0

Вы были правы - мне приходилось обращаться к' comments' через '@ post' –

Смежные вопросы