代码之家  ›  专栏  ›  技术社区  ›  cluster1

理解:redirect_to@object(通常用于Rails创建操作)

  •  0
  • cluster1  · 技术社区  · 2 年前

    来自 Ruby on Rails Guides-Tutorial :

    def create
      @article = Article.new(title: "...", body: "...")
    
      if @article.save
        redirect_to @article # How does this work?
      else
        render :new, status: :unprocessable_entity
      end
    end
    

    有关“重定向到哪个视图?”的信息: 它是如何基于这里提供的@article对象完成的?

    我不知道如何在“特定类的对象”和特定路径之间进行映射。

    有没有可能,Rails有点太神奇了?

    1 回复  |  直到 2 年前
        1
  •  1
  •   max Mike Williams    2 年前

    路由助手的动态解析是通过 ActionDispatch::Routing::PolymorphicRoutes .

    它在这里的主要作用是,当您传递模型实例时,它使用由 ActiveModel::Naming 要获得单一路由密钥名称:

    irb(main):006:0> Article.model_name.singular_route_key
    => "article"
    

    然后使用该名称调用 article_path 动态路由助手方法。由于它是模型类的实例,多态路由助手将调用 to_param 关于路径助手的参数的模型。

    irb(main):005:0> app.polymorphic_path(article)
    => "/articles/3"
    irb(main):006:0> app.polymorphic_path(Article.model_name.singular_route_key, [article.to_param])
    => "/articles/3"
    

    这不仅在重定向时使用,而且在框架的其他部分(如表单和链接)中广泛使用。

    有没有可能,Rails有点太神奇了?

    只有你不努力去理解它,它才是魔法。

    这只是一个简单的例子,使用Convention over Configuration根据模型和路线之间的假定连接来猜测路线。你不必使用它。