1

「フォームの最初の引数に nil を含めたり、空にすることはできません」というエラーが発生し、答えが見つかりません。

基本的に、ユーザーのショーページに表示される投稿があり、それぞれにコメントするオプションが必要です。私のルートは次のとおりです。

 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>

■ 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:inin_app_views_users_show_html_erb__480533737_37130988'

各投稿に show ページがある場合、@posts を show アクションに配置してインスタンス変数にすることはわかっていますが、各投稿には個別のコメント ダイアログ ボックスが必要なので、それほど一般的なものにすることはできません。ただし、投稿コントローラーを通過しないため、各投稿に固有にすることはできません。コメントにはacts_as_commentableを使用しています。理想的には、それらを汎用化し、すべての form_for コメントをパーシャルに入れたいと考えていますが、後でそれを理解します。

4

0 に答える 0