在Ruby on Rails框架中,Cocoon是一个流行的gem,用于处理嵌套表单。如果你在show.html.erb
视图中遇到了未定义方法的错误,这通常意味着你尝试调用的方法在当前的上下文中不存在。
Cocoon gem允许开发者轻松地创建嵌套的表单,这在处理关联模型时非常有用。例如,如果你有一个Post
模型和一个Comment
模型,每个Post
可以有多个Comment
,Cocoon可以帮助你在创建或编辑Post
时同时处理Comment
。
假设你有一个Post
模型和一个Comment
模型,并且你正在尝试在show.html.erb
中使用Cocoon来显示评论:
<!-- app/views/posts/show.html.erb -->
<div id="comments">
<%= render @post.comments %>
</div>
<%= link_to 'Add a comment', new_post_comment_path(@post), remote: true %>
确保你有相应的comments/_comment.html.erb
部分视图:
<!-- app/views/comments/_comment.html.erb -->
<div class="comment">
<%= comment.body %>
</div>
并且在CommentsController
中处理创建评论的逻辑:
# app/controllers/comments_controller.rb
class CommentsController < ApplicationController
before_action :set_post
def new
@comment = @post.comments.new
end
def create
@comment = @post.comments.new(comment_params)
if @comment.save
respond_to do |format|
format.html { redirect_to @post }
format.js
end
else
render :new
end
end
private
def set_post
@post = Post.find(params[:post_id])
end
def comment_params
params.require(:comment).permit(:body)
end
end
Cocoon特别适用于需要动态添加或删除嵌套对象的场景,如电子商务网站的产品选项、博客文章的评论、项目的任务列表等。
如果你遵循了上述步骤并且仍然遇到问题,建议检查Rails日志文件以获取更多详细的错误信息,或者在Stack Overflow等社区寻求帮助,同时确保你的Cocoon版本与你的Rails应用兼容。
领取专属 10元无门槛券
手把手带您无忧上云