form_for для комментируемых в рельсах
У меня проблемы с ошибкой "Первый аргумент в форме не может содержать ноль или быть пустым", на которую я не смог найти ответ.
По сути, у меня есть сообщения, которые отображаются на странице показа пользователя, каждый из которых должен иметь возможность комментировать их. Мои маршруты следующие:
resources :posts, only: [:create, :destroy] do
resources :comments, only: [:create, :destroy]
end
пользователи /show.html.erb
<ol class="posts">
<%= render @posts %>
</ol>
сообщений / _post.html.erb
<li>
<span class="content"><%= post.content %></span>
<span class="timestamp">
Posted <%= time_ago_in_words(post.created_at) %> ago.
</span>
<% if current_user?(post.user) %>
<%= link_to "delete", post, method: :delete,
data: { confirm: "You sure?" },
title: post.content %>
<% end %>
<span class="content">
<ul> Comments: <%= post.comments.count %></ul>
<% post.comments.each do |comment| %>
<ul> <%= comment.comment %> </ul>
<% end %>
</span>
<% if post != nil %>
<% form_for [post, @comment] do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div class="field">
<%= f.text_area :content, placeholder: "Comment..." %>
</div>
<%= f.submit "Post", class: "btn btn-lg btn-primary" %>
<% end %>
<% end %>
</li>
s comments_controller.rb
def create
@post = Post.find(params[:id])
@comment = @post.comments.build(comment_params)
@comment.user = current_user
if @comment.save
flash[:success] = "Posted!"
redirect_to @post
else
render 'static_pages/home'
end
end
def destroy
@comment.destroy
redirect_to root_url
end
Показывает C:/app/views/posts/_post.html.erb, где поднята строка #21: (строка 21 - строка form_for) Первый аргумент в форме не может содержать nil или быть пустым app/views/posts/_post.html.erb:21: в _app_views_posts__post_html_erb___306000501_37434348'
app/views/users/show.html.erb:19:in
_app_views_users_show_html_erb__480533737_37130988'
Если бы у каждого поста была страница показа, я знаю, что я поместил бы @posts в действие показа и затем сделал бы его переменной экземпляра, но так как каждому посту нужно отдельное диалоговое окно комментария, я не могу сделать его таким общим. Он не проходит через контроллер сообщений, поэтому я не могу сделать его конкретным для каждого сообщения. Я использую act_as_commentable для комментариев. В идеале я хотел бы сделать их общими и поместить все комментарии в форме form_for в частичное, но я выясню это позже.