[英]How to generate code using the code generator for the custom resource definition
[英]“Generate resource” command with “--skip-model” flag results in faulty resource
刚开始使用 Buffalo,尝试了所有漂亮的功能:)
但是,我遇到了“生成资源”命令与“--skip-model”标志相结合的问题。 使用此标志时,所有生成的函数(“List”、“Show”、“Create”、“Update”和“Destroy”)都完全以小写形式创建。 然而,同样生成的结构引用“buffalo.Resource”并包含这些函数,其中第一个字母为大写,导致资源不起作用。
buffalo g r todo --skip-model
。buffalo dev
运行应用程序。我希望生成的函数的第一个字母为大写,与“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.