gpt4 book ai didi

ruby-on-rails - ruby on rails has_many child 关系表单验证

转载 作者:行者123 更新时间:2023-12-04 06:13:43 25 4
gpt4 key购买 nike

我按照教程创建了博客应用程序。所以我有帖子和评论。帖子表单中字段的验证工作完美。帖子评论部分的验证也有效,但我无法打印错误。

评论模型:

    class Comment       belongs_to :post        validates :commenter, :presence => true      end

评论 Controller :

  def create    @post = Post.find(params[:post_id])    @comment = @post.comments.build(params[:comment])    if @comment.save      redirect_to post_path(@post)    else      render :template => 'posts/show'     endend  def destroy    @post = Post.find(params[:post_id])    @comment = @post.comments.find(params[:id])    @comment.destroy    render :template => 'posts/show'      end

帖子 Controller :

  def index    @posts = Post.all    respond_to do |format|      format.html # index.html.erb      format.xml  { render :xml => @posts }    end  end  def show    @post = Post.find(params[:id])    @comment = @post.comments.build #added    #@comment = @Comment.new #added    respond_to do |format|      format.html # show.html.erb      format.xml  { render :xml => @post }    end  end  def new    @post = Post.new    respond_to do |format|      format.html # new.html.erb      format.xml  { render :xml => @post }    end  end  def edit    @post = Post.find(params[:id])  end  def create    @post = Post.new(params[:post])    respond_to do |format|      if @post.save        format.html { redirect_to(@post, :notice => 'Post was successfully created.') }        format.xml  { render :xml => @post, :status => :created, :location => @post }      else        format.html { render :action => "new" }        format.xml  { render :xml => @post.errors, :status => :unprocessable_entity }      end    end  end  def update    @post = Post.find(params[:id])    respond_to do |format|      if @post.update_attributes(params[:post])        format.html { redirect_to(@post, :notice => 'Post was successfully updated.') }        format.xml  { head :ok }      else        format.html { render :action => "edit" }        format.xml  { render :xml => @post.errors, :status => :unprocessable_entity }      end    end  end  def destroy    @post = Post.find(params[:id])    @post.destroy    respond_to do |format|      format.html { redirect_to(posts_url) }      format.xml  { head :ok }    end  end

我使用的形式是:


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

我如何获得评论的 .errors?如果我尝试,我总是得到:未定义的方法“错误”或 nil 对象。

请帮忙,我是 Rails 的新手。

谢谢!

选择

最佳答案

问题是,每次加载表单时,您都在构建新的评论。像这样,带有验证错误的评论永远不会出现在您的表单中。

改为在您的 Controller 中创建评论,就像这样——具体取决于您的应用程序:

# posts controller
def show
@post = Post.find(params[:id])
@comment = Comment.new
end

# comments controller
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.build(params[:comment])
if @comment.save
redirect_to @post
else
render :new
end
end

然后改变你的形式:

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

关于ruby-on-rails - ruby on rails has_many child 关系表单验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5397024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com