Я создаю приложение, в котором пользователи могут комментировать сообщения. Тем не менее, я получаю сообщение об ошибке при попытке показать сообщения: ArgumentError in PostsController#show First argument in form cannot contain nil or be empty
Ruby 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
- У меня также есть проблема с этим, но я хотел бы решить одну проблему за раз (если они так или иначе не задействованы)
Это правда - и важный надзор! но теперь я получаю сообщение об ошибке «« nil »не является объектом, совместимым с ActiveModel. Он должен реализовать: to_partial_path« –
Хорошо ... Я думаю, теперь проблема в том, что эта строка '<% = render @comments%> 'должен быть' <% = render @ post.comments%> ' – keyzee
Вы были правы - мне приходилось обращаться к' comments' через '@ post' –