我真的很担心如何做到这一点。
我也感到疲倦和沮丧,而且看着这么多不同的东西,我的大脑也在受伤。
保留未使用的REST操作是不好的做法?我有一个资源模型,例如,用户可以提交它们,但我不需要'索引'显示它们的操作,因为它由Home#index控制器处理。我想要做的就是使用link_to转到带有表单的页面来添加新资源。所以现在所有的link_to尝试在我执行resources_path时继续尝试转到/ resources。我读了你如何使用' legacy'方法,只是链接到控制器中的操作,但这不是轨道方式'。现在我试图找出什么是rails方式,如果我没有使用它默认的所有不同的REST动作。
上述情况听起来像我这样做吗?我希望它在home #index中列出所有资源而不是资源#index?
如果这是不好的做法,那我该如何手动创建呢?我在网上看到的所有教程都是"只需输入resource :user
即可,你就是好人!它并没有说如果你不想要/不需要所有这些怎么办
如果我想更改默认的网址怎么办?我并不特别关心它,但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'
答案 0 :(得分:12)
<强> 1。保留未使用的REST操作是不好的做法?
只要我能回答这个问题,这并不是一种糟糕的做法。如果您不需要控制器的索引操作,则没有它,句点。但是您应该在路线中排除此操作,例如做resource :resources, :except => [:index]
。当你从错误中解救时,这可以变得很方便,因为NoTemplateError与RoutingError不同(这意味着你可能会错过在生产中拯救某些东西)。
此外,它是一个很好的开发小帮手。当您意外地写入未使用的控制器索引的链接时,如果您排除了路径中的操作,则会在包含该链接的页面上出现错误。如果你不这样做,你只会在点击链接后看到错误,因为路线有效(但没有功能/模板/无论如何)。
<强> 2。以上情况听起来像我这样做吗?我希望它在home #index中列出所有资源而不是资源#index?
如果不了解业务逻辑/应用程序工作流程,我无法回答这个问题。但如果你不需要它,你就离开它。
如果是化妆品问题(例如,基本上需要资源#index,但在另一个网址下),您可以创建一个路由match "home", :to => "resources#index"
。这会弃用您的自定义主控制器,您可以使用resources
上的/home
和/resources
下的索引操作。但同样,这可能不是您的工作流程/逻辑的最佳选择,所以这只是一个建议。
第3。如果这是不好的做法,那么我该如何手动创建它们呢?
关于您的所有路由需求,Rails guides page上有一个很好的页面。看看那里。
<强> 4。如果我想更改默认的网址怎么办?
Rails方式是约定优于配置。意味着那些方法是rails惯例。坚持这个惯例很好,所以每次你回到你的应用程序改变的东西,你至少知道它是如何工作的,因为这个约定。即使是没有任何应用程序知识的导轨编码器,当每个人都坚持这种惯例时,也可以更快地对其进行修改。 This RoR vs PHP fun commercial explains this very good.
你可以改变那些,但你不应该。
<强> 5。鉴于我留下所有网址相同。如果我转到/ 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,否则它不会存储到数据库中。
这些只是我对此的看法和经验,所以如果有更多有经验的人认为有问题,我很高兴看到评论并更新我的回答。