繁体   English   中英

带有“--skip-model”标志的“生成资源”命令导致资源错误

[英]“Generate resource” command with “--skip-model” flag results in faulty resource

描述

刚开始使用 Buffalo,尝试了所有漂亮的功能:)

但是,我遇到了“生成资源”命令与“--skip-model”标志相结合的问题。 使用此标志时,所有生成的函数(“List”、“Show”、“Create”、“Update”和“Destroy”)都完全以小写形式创建。 然而,同样生成的结构引用“buffalo.Resource”并包含这些函数,其中第一个字母为大写,导致资源不起作用。

重现问题的步骤

  1. 使用带有“--skip-model”标志的生成资源命令: buffalo g r todo --skip-model
  2. 使用: buffalo dev运行应用程序。
  3. 导航到“http://127.0.0.1:3000/todoes”; 验证您是否收到错误消息“运行时错误:无效的 memory 地址或零指针取消引用”。
  4. 在生成的文件中验证“todoes.go”是否包含完全小写的生成函数(“List”、“Show”、“Create”、“Update”和“Destroy”),而生成的名为“TodoesResource”的结构是指“buffalo.Resource”并包含这些函数,其中第一个字母为大写。

预期行为

我希望生成的函数的第一个字母为大写,与“buffalo.Resource”中的名称匹配,并在导航到“http://127.0.0.1:3000/todoes”时产生响应“Todo#list”(之后启动应用程序)。 当你不使用“--skip-model”标志时就是这种情况,所以我不确定为什么当你使用这个标志时它的行为会有所不同。

实际行为

生成的函数(“List”、“Show”、“Create”、“Update”和“Destroy”)完全小写,而名为“TodoesResource”的生成结构指的是“buffalo.Resource”并包含这些函数第一个字母大写。 当导航到“http://127.0.0.1:3000/todoes”(启动应用程序后)时,这会导致错误“运行时错误:无效的 memory 地址或零指针取消引用”。

建议的解决方案

我无法创建拉取请求(因为我在尝试发布分支时收到错误“gobuffalo/buffalo.git 的权限被拒绝”),但我认为这个问题有两种可能的解决方案:

首选解决方案

修改文件“genny/resource/templates/standard/action/resource-name.go.tmpl”修改如下代码:

// {{$a.String}} default implementation.
func (v {{$.opts.Name.Resource}}Resource) {{$a.String}}(c buffalo.Context) error {
  return c.Render(http.StatusOK, r.String("{{$.opts.Model.Proper}}#{{$a.String}}"))
}

并将其更改为:

// {{$a.Pascalize}} default implementation.
func (v {{$.opts.Name.Resource}}Resource) {{$a.Pascalize}}(c buffalo.Context) error {
  return c.Render(http.StatusOK, r.String("{{$.opts.Model.Proper}}#{{$a.Pascalize}}"))
}

替代解决方案

修改文件“genny/resource/actions.go”以更改以下代码:

func actions(opts *Options) []name.Ident {
    actions := []name.Ident{
        name.New("list"),
        name.New("show"),
        name.New("create"),
        name.New("update"),
        name.New("destroy"),
    }
    if opts.App.AsWeb {
        actions = append(actions, name.New("new"), name.New("edit"))
    }
    return actions
}

并将其更改为:

func actions(opts *Options) []name.Ident {
    actions := []name.Ident{
        name.New("List"),
        name.New("Show"),
        name.New("Create"),
        name.New("Update"),
        name.New("Destroy"),
    }
    if opts.App.AsWeb {
        actions = append(actions, name.New("New"), name.New("Edit"))
    }
    return actions
}

这是一个错误,目前正在修复中。 另请参阅: https://github.com/gobuffalo/buffalo/issues/2023

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM