gpt4 book ai didi

ruby-on-rails - 在 Ruby on Rails 中运行另一个 Controller 操作

转载 作者:行者123 更新时间:2023-12-01 04:19:53 24 4
gpt4 key购买 nike

这发生在我身上好几次,我还没有找到一个可以接受的解决方案。

我在一个站点的主页上有一个表单,该表单指向另一个实际处理数据的 Controller 。当表单提交成功时,另一个 Controller 会用一个漂亮的 flash[:notice] 消息将您发送回主页,这就是它的结束。

当出现验证问题时,它就会成为一个问题。我想要做的是显示带有验证错误表单的主页。通常提到的幼稚解决方案是您可以渲染另一个模板,但显示主页不仅仅是渲染模板,它还具有很多功能。呈现该模板的唯一方法是复制并粘贴此其他 Controller 操作中的功能,或者可能从 Controller 中移除所有功能,这也不是很好

有更好的解决方案吗?

更新 :我理解人们说 Controller Action 应该更小并调用另一个方法,但在实践中,我不知道如何实现它。我将在我所做的网站上发布一个真实的例子。

有两种模型和 Controller :帖子和评论。一个帖子有很多原因。一个帖子是这样显示的:

def index
set_posts # sets @posts
end

def show
@post = Post.find_by_slug(params[:id])
@comment = Comment.new
if not @post
flash[:error] = "'#{params[:id]}' does't exist"
set_posts
render :action => :index, :status => :not_found
end
end

private
def set_posts
@posts = Posts.get_all_public_posts
end

评论 Controller 只有一个创建 Action :
def create
@comment = Comment.new(params[:comment])
@comment.post = Post.find_by_slug params['post_id']

if not @comment.post
# Now what?
# We should here call PostsController.set_posts and render views/posts/index
end

if @reason.save
flash[:notice] = 'Thank you for your message.'
redirect_to(@reason.item)
else
# Now what?
# We should here call PostsController.show without overriding the @comment
end
end

结尾

“现在呢?”零件是我没有好的解决方案的零件。

最佳答案

在呈现表单和将请求重定向到默认操作之间,主页的其余部分有多少变化?

如果答案根本不是很多,那么您应该考虑使用 remote_form_for并仅更新成功时的通知区域或失败时带有验证错误的表单。

如果这不符合您的喜好,您可以将主页操作中的所有重复逻辑移动到 ApplicationController 类中定义的方法,并将其作为主页操作和处理表单的操作上的 before_filter 的一部分进行调用。 备注 : 这样做会要求你设置实例变量,在过滤器中设置的局部变量不会持续到一个 Action 。

关于ruby-on-rails - 在 Ruby on Rails 中运行另一个 Controller 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2331272/

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