0

質問: 私の目標は、ユーザーのページの下にプロジェクトをリストし、このユーザー ページにリストされている各プロジェクトの下にコメント ボックスをレンダリングすることです。しかし、コメント ボックス フォームをレンダリングしようとすると、ルーティング エラーが発生します。これは、プロジェクトの ID を取得できないためです。私の推測では、コントローラーと関係があると思いますが、理解していません。誰かがこれを解決する方法を知っていますか?

Routing Error
No route matches {:controller=>"comments", :format=>nil, :project_id=>#<Project id: nil...>}

私のアプリケーションでは、ユーザー、プロジェクト、およびコメントのモデルとコントローラーを作成しました。コメントはプロジェクトに属し、プロジェクトはユーザーに属します

user.rb

has_many :projects

project.rb

has_many :comments
belongs_to :user

コメント.rb

belongs_to :project

ルート.rb

resources :users do
  resources :projects do
    resources :comments
  end
end

resources :projects do
  resources :comments 
end

resources: comments

ビュー/ユーザー/projects.html.erb

<%= render @projects %>

ビュー/プロジェクト/_project.html.erb

<%= project.content %>
<%= render 'comments/form' %>

ビュー/コメント/_form.html.erb

<%= form_for([@project, @project.comments.build]) do |f| %>
    <div class="field">
    <%= f.text_area :content, :class => "span12", :rows => "3" %>
    </div>

    <%= f.hidden_field :user_id, :value => current_user.id %>

    <div class="actions">
    <%= f.submit "Add Comment", :class => "btn btn-header" %>
    </div>
<% end %>

コメント_コントローラー.rb

def create
  @project = Project.find(params[:project_id])
  @comment = @project.comments.create!(params[:comment])

  if @comment.save
    redirect_to projects_user_path(@project.user)
  end   
end

上記のリダイレクトによるエラー

NoMethodError in CommentsController#create
undefined method `user'
4

1 に答える 1