我不知道如何解决这个问题,我到处都在寻找,但是没有什么可以帮助我解决问题
编辑 这是我在评论控制器中的代码
class CommentsController < ApplicationController
before_action :set_comment, only: [:show, :edit, :update, :destroy]
# GET /comments
# GET /comments.json
def index
@comments = Comment.all
end
# GET /comments/1
# GET /comments/1.json
def show
end
# GET /comments/new
def new
@course = Course.find(params[:course_id])
@comment = @course.comments.build
end
# GET /comments/1/edit
def edit
end
# POST /comments
# POST /comments.json
def create
@course = Course.find(params[:course_id])
@comment = @course.comments.build(comment_params)
respond_to do |format|
if @comment.save
format.html { redirect_to @course, notice: 'Comment was successfully created.' }
format.json { render :show, status: :created, location: @comment }
else
format.html { render :new }
format.json { render json: @comment.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /comments/1
# PATCH/PUT /comments/1.json
def update
respond_to do |format|
if @comment.update(comment_params)
format.html { redirect_to @comment, notice: 'Comment was successfully updated.' }
format.json { render :show, status: :ok, location: @comment }
else
format.html { render :edit }
format.json { render json: @comment.errors, status: :unprocessable_entity }
end
end
end
# DELETE /comments/1
# DELETE /comments/1.json
def destroy
@comment.destroy
respond_to do |format|
format.html { redirect_to comments_url, notice: 'Comment was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_comment
@comment = Comment.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def comment_params
params.require(:comment).permit(:title, :body)
end
end
所以我认为问题可能出在创建和新问题上,我不知道如何将模型与一对多联系起来,我能够在自己的课程中创建注释,但是当我想编辑其中一个注释apiers时该错误,在我单击编辑的每条评论中,我都被发送到相同的URL,但未找到相同的错误ID = 3
这也是我的html代码(也许错误也在那里):
<%= form_for @comment, :url => course_comments_path(params[:course_id]) do |f| %>
<% if comment.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(comment.errors.count, "error") %> prohibited this comment from being saved:</h2>
<ul>
<% comment.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :title %>
<%= f.text_field :title, id: :comment_title %>
</div>
<div class="field">
<%= f.label :body %>
<%= f.text_area :body, id: :comment_body %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
和我的课程的show.html:
<% if current_user%>
<p id="notice"><%= notice %></p>
<p>
<h1><%= @course.name %></h1>
</p>
<p>
<h2>Comentarios del curso:</h2>
</p>
<p>
<% @course.comments.each do |comment| %>
<h3><%= comment.title %></h3>
<p><%= comment.body %></p>
<%if current_user.admin%>
<%= link_to 'Edit', edit_course_comment_path(@course) %>
<%end%>
<%end%>
</p>
<%if current_user.admin %>
<%= link_to 'Postear', new_course_comment_path(@course)%>
<%= link_to 'Edit', edit_course_comment_path%>
<%= link_to 'Back', authenticated_root_path %>
<%else%>
<%= link_to 'Postear', new_course_comment_path(@course) %>
<%= link_to 'Back', authenticated_root_path %>
<%end%>
答案 0 :(得分:0)
我认为这条线
<%= link_to 'Edit', edit_course_comment_path(@course) %>
应该是
<%= link_to 'Edit', edit_course_comment_path(@course, comment) %>
您需要课程ID和评论。
答案 1 :(得分:0)
首先,您会混合使用shallow nesting和深层嵌套。浅层嵌套是影响成员路由嵌套的路由选项。
resources :courses do
# GET|PUT|PATCH|DELETE /courses/:course_id/comments/:id
# GET /courses/:course_id/comments/:id/edit
resources :comments
# GET|PUT|PATCH|DELETE /comments/:id
# GET /comments/:id/edit
resources :comments, shallow: true
end
我通常建议使用浅层嵌套-除非子项只能在其父项的范围内存在或仅在其父项的范围内唯一。并且您的控制器已设置为浅层嵌套。只要确保您编辑了脚手架中的注释,就可以正确记录正确的路径。
除了路线之外,您还需要使用正确的链接助手:
# deep nesting
link_to 'Edit', edit_course_comment_path(@course, @comment)
# shallow nesting
link_to 'Edit', edit_comment_path(@comment)
如果您确实需要同时支持这两者,则可以使用多路线辅助功能:
link_to 'Edit', [:edit, @course, @comment]
要为嵌套资源创建表单,请传递一个包含父项和子项的数组:
form_for([@course, @comment])
# or in rails 5+
form_with(model: [@course, @comment])
这在深层和浅层嵌套以及Rails压缩数组时都可以很好地工作。这也使您可以使用相同的部分表单来创建和更新。
在Rails中显式传递表单的URL是99%的冗余时间。如果您仅遵循约定,Rails足够聪明,可以找出创建和更新的正确路径。