嵌套编辑路径无法正常工作

时间:2017-05-25 11:37:31

标签: ruby-on-rails ruby

尝试找出_comment.html.erb文件中的编辑路径。

继续收到此错误:

ActiveRecord::RecordNotFound in CommentsController#edit
Couldn't find Article with 'id'=#<Comment::ActiveRecord_Associations_CollectionProxy:0x007fcac37359e8>

不知道如何写出正确的路径。

评论控制器

class CommentsController < ApplicationController
  def create
    @article = Article.find(params[:article_id])
    @comment = @article.comments.create(comment_params)
    redirect_to article_path(@article)
  end

  def show
    @article = Article.find(params[:article_id])
    @comment = @article.comments.find(params[:id])
  end

  def edit 
    @article = Article.find(params[:article_id])
    @comment = @article.comments.find(params[:id])
  end


  def destroy 
    @article = Article.find(params[:article_id])
    @comment = @article.comments.find(params[:id])
    @comment.destroy 
    redirect_to article_path(@article) 
  end

  private
    def comment_params
      params.require(:comment).permit(:commenter, :body)
    end
end

_comment.html.erb

<p>
  <strong>Commenter:</strong>
  <%= comment.commenter %>
</p>

<p>
  <strong>Comment:</strong>
  <%= comment.body %>
</p>

<p>
  <%= link_to 'Edit', edit_article_comment_path(@article.comments, comment) %>
</p>

<p>
  <%= link_to 'Show', [comment.article, comment] %>
</p>

<p>
  <%= link_to 'Destroy Comment', [comment.article, comment],
               method: :delete,
               data: { confirm: 'Are you sure?' } %>
</p>

路由

  resources :articles do 
    resources :comments
  end

如何写出正确的路径?

此外,我之前的路径是:

  <%= link_to 'Edit', edit_article_comment_path(@article, comment) %>

但是它会出现一个空白的编辑形式,即没有任何文本框填充了任何东西......因此我尝试了另一条路径。

任何帮助都将不胜感激。

谢谢。

评论_form.html.erb

<%= form_for([@article, @article.comments.build]) do |f| %>
  <p>
    <%= f.label :commenter %><br>
    <%= f.text_field :commenter %>
  </p>
  <p>
    <%= f.label :body %><br>
    <%= f.text_area :body %>
  </p>
  <p>
    <%= f.submit %>
  </p>
<% end %>

文章show.html.erb

<p>
  <strong>Title:</strong>
  <%= @article.title %>
</p>

<p>
  <strong>Text:</strong>
  <%= @article.text %>
</p>

<h2>Comments</h2>
<%= render @article.comments %>

<h2>Add a comment:</h2>
<%= render 'comments/form' %>

<%= link_to 'Edit', edit_article_path(@article) %> |
<%= link_to 'Back', articles_path %>

1 个答案:

答案 0 :(得分:0)

_comment.html.erb

中存在问题
<%= link_to 'Edit', edit_article_comment_path(@article.comments, comment) %>

应该是

<%= link_to 'Edit', edit_article_comment_path(@article, comment) %>
  

但是它会显示一个空白的编辑表单,即没有任何文本框中有任何内容填写

您应该检查是否在form_for

中传递了正确的值
<%= form_for [@article, @comment] do |f| %>

<强> EDIT2

问题是你每次都要传递新的评论实例,即使是编辑动作也是如此。这就是为什么你没有得到任何形式的值

<%= form_for([@article, @article.comments.build]) do |f| %>

将其更改为

<%= form_for([@article, @comment]) do |f| %>

确保您在@article的{​​{1}}和@comment行动中分配newedit,或者从呈现{{1}的任何地方分配CommentsControllercomments/_form }}

class CommentsController < ApplicationController
  def new
    @article = Article.find(params[:article_id])
    @comment = @article.comments.new
  end

  def edit 
    @article = Article.find(params[:article_id])
    @comment = @article.comments.find(params[:id])
  end

  #...
end