我也很累,也很沮丧,看着这么多不同的东西,我的大脑也在受伤.
>保留未使用的REST操作是不好的做法?我有一个资源模型,例如,用户可以提交它们,但我不需要’index’动作来显示它们,因为它是由Home#index控制器处理的.我想要做的就是使用link_to转到带有表单的页面来添加新资源.所以现在所有的link_to都试图在我执行resources_path时继续尝试转到/ resources.我读了你如何使用’遗留’方法,只是直接链接到控制器中的动作,但这不是“轨道方式”.现在我试图找出什么是rails方式如果我没有使用默认情况下所做的所有不同的REST操作.
>上述情况听起来像我这样做吗?我希望它在home #index中列出所有资源而不是资源#index?
>如果这是不好的做法,那么我该如何手动创建它们?我在网上看到的所有教程都是“只是输入资源:用户而且你很好!如果你不想要/不需要所有这些,它不会说该做什么
>如果我想更改默认的网址怎么办?我并不特别关心它,但IRC的每个人都在告诉我这是’错的’.如何更改URL错误?我希望它是/ resource / submit而不是/ resources / new.单数/复数似乎对我更有意义,看起来更专业.
>鉴于我留下的所有网址都是一样的.如果我转到/ resources / new并点击表单上的“提交”
模板丢失了
Missing template resources/create,application/create with {:locale=>[:en],:formats=>[:html],:handlers=>[:erb,:builder,:coffee]}. Searched in: * "/Users/Zesty/Code/gem-portal/app/views" * "/usr/local/lib/ruby/gems/1.9.1/gems/devise-2.0.4/app/views"
如果我有资源:我的路线中的资源我不知道为什么它不会自动转到资源#create:
def create @resource = Resource.new(params[:resource]) end
谢谢!
顺便说一句,这是我的路线中的最新情况,万一有任何明显的错误
root :to => 'home#index' resources :resources # match '/resource/submit',:to => 'resources#new' match '/learn',:to => 'pages#learn' match '/contact',:to => 'pages#contact' match '/requests',:to => 'pages#requests'
解决方法
只要我能回答这个问题,这并不是一种糟糕的做法.如果您不需要控制器的索引操作,则没有它,句点.但是您应该在路线中排除此操作,例如做资源:资源,:除了=> [:指数].当您从错误中解救时,这可能会变得很方便,因为NoTemplateError与RoutingError不同(这意味着您可能会错过在生产中挽救某些东西).
此外,它是一个很好的开发小帮手.当您意外地写入未使用的控制器索引的链接时,如果您排除了路径中的操作,则会在包含该链接的页面上出现错误.如果你不这样做,你只会在点击链接后看到错误,因为路线有效(但没有功能/模板/无论如何).
2.上述情况听起来像我这样做吗?我希望它在home #index中列出所有资源而不是资源#index?
如果不了解业务逻辑/应用程序工作流程,我无法回答这个问题.但如果你不需要它,你就离开它.
如果是化妆品问题(例如,资源#index基本上是需要的,但在另一个网址下),你可以创建路由匹配“home”,:to => “资源#指数”.这将弃用您的自定义主控制器,您可以对/ home下和/ resources下可用的资源使用索引操作.但同样,这可能不是您的工作流程/逻辑的最佳选择,所以这只是一个建议.
3.如果这是不好的做法,那么我该如何手动创建它们呢?
Rails guides page上有一个关于您所有路由需求的精彩页面.看看那里.
4.如果我想更改默认的网址怎么办?
Rails方式是约定优于配置.意味着那些方法是rails惯例.坚持这个惯例很好,所以每次你回到你的应用程序改变的东西,你至少知道它是如何工作的,因为这个约定.即使是没有任何应用程序知识的导轨编码器,当每个人都坚持这种惯例时,也可以更快地对其进行修改. This RoR vs PHP fun commercial explains this very good.
你可以改变那些,但你不应该.
鉴于我留下的所有网址都是一样的.如果我转到/ resources / new并点击表单上的“提交”
创建之后,您通常会重定向到某个内容或在创建调用中呈现新操作,以保留当前对象的信息(例如错误),这些信息在您进行重定向时会丢失.您目前仍处于创建操作(无渲染/重定向另一个操作),因此rails需要一个create.html.erb模板.
例:
def create @resource = Resource.new(params[:resource]) if @resource.save # record valid and saved,so redirecting to /resources/:id redirect_to @resource else # record not valid. rendering the new.html.erb template # (HINT the new action is NOT called here). render :action => :new end end
请记住.new会创建一个新对象,但除非您在其上调用例如.save,否则它不会存储到数据库中.
这些只是我对此的看法和经验,所以如果有更多有经验的人认为有问题,我很高兴看到评论并更新我的答案.