【问题标题】:grails redirect(action:'index') redirects to show actiongrails redirect(action:'index') 重定向以显示操作
【发布时间】:2014-10-17 12:37:13
【问题描述】:

我是 grails 的新手,我正在尝试用它编写一个简单的博客应用程序。我有一些资源,我正在尝试实现创建资源逻辑。 这是我所做的;

标签的 URL 映射;

"/tags"(resources: 'tags')

标签控制器;

class TagsController {
  def index() {
      [tags: Tag.list()]
  }

  def create() { }

  def save() {
      def tag = new Tag(params.tag)
      if(tag.save()) {
          flash.message = "Tag Created Successfully"
          redirect(action: "index")
      }
      else {
          flash.error = "Something went wrong, please check the form again!"
          render(view: "create")
      }
  }

  def show() {
      render "this is the show action"
  }

}

使用此配置 redirect(action: "index") 重定向到标签/索引路径。但此路径不适用于索引操作,而是用于显示操作。

我做错了什么?

我试过这样的 URL 映射;

"/tags"(resources: 'tag')

在这种情况下,tags/ 和 tags/index 路径会触发索引操作,但 tags/6(6 是数据库中现有标签的 id)不会触发显示操作。

【问题讨论】:

    标签: grails redirect grails-controller


    【解决方案1】:

    "/tags"(resources: 'tags') 是正确的。

    如果您想从save 重定向到show,您必须提供show 所需的id。请参阅mapping grails 如何将 url 映射到操作。

    提供id你可以写

    redirect(action: "index", id: tag.id)
    

    redirect(action: "show", id: tag.id)
    

    [更新:]

    要重定向到index,您必须明确设置方法:

    重定向(动作:“索引”,方法:“GET”)

    【讨论】:

    • 我想从保存重定向索引。
    • 它有效。感谢您更新的答案。但这也太奇怪了吧?为什么我需要设置方法? grails 文档中没有关于此的定义。你也确定 "/tags"(resources: 'tags') 是正确的吗?我在文档中看到他们使用模型名称作为单数。
    • 我不知道为什么我们必须提供方法,我没有找到解释。它是“标签”,因为我们将 url 映射到控制器上,控制器名称是“TagsController”,带有“s”。见grails.org/doc/latest/guide/theWebLayer.html#restfulMappings是控制器的名字。
    • 正如我在本节顶部看到的那样,他们使用了这样的东西; "/books"(resources:'book') 所以他们用 /books 路径映射书籍资源对吗?在我的例子中,我使用了“/tags”(资源:'tags')。这是真的还是我应该像 "/tags"(resources: 'tag') 一样使用它?感谢您的回答。
    • resources 只是控制器的名称。通常你会根据相应的域类的名称来命名控制器。因此,使用域“Tag”将控制器命名为“TagController”。这使得查看控制器处理哪个域类变得更容易。但这不是严格的规定。您可以随意命名控制器。
    猜你喜欢
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    相关资源
    最近更新 更多