留下未使用的REST动作是不是很糟糕?

时间:2012-02-27 11:16:59

标签: ruby-on-rails ruby ruby-on-rails-3 rest

我真的很担心如何做到这一点。

我也感到疲倦和沮丧,而且看着这么多不同的东西,我的大脑也在受伤。

  1. 保留未使用的REST操作是不好的做法?我有一个资源模型,例如,用户可以提交它们,但我不需要'索引'显示它们的操作,因为它由Home#index控制器处理。我想要做的就是使用link_to转到带有表单的页面来添加新资源。所以现在所有的link_to尝试在我执行resources_path时继续尝试转到/ resources。我读了你如何使用' legacy'方法,只是链接到控制器中的操作,但这不是轨道方式'。现在我试图找出什么是rails方式,如果我没有使用它默认的所有不同的REST动作。

  2. 上述情况听起来像我这样做吗?我希望它在home #index中列出所有资源而不是资源#index?

  3. 如果这是不好的做法,那我该如何手动创建呢?我在网上看到的所有教程都是"只需输入resource :user即可,你就是好人!它并没有说如果你不想要/不需要所有这些怎么办

  4. 如果我想更改默认的网址怎么办?我并不特别关心它,但IRC的每个人都在告诉我这是错误的'。如何更改URL错误?我希望它是/ resource / submit而不是/ resources / new。单数/复数对我来说似乎更有意义,看起来更专业。

  5. 鉴于我留下了所有网址相同的内容。如果我转到/ resources / new并点击提交'在表格上说

  6. 缺少模板

    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'
    

1 个答案:

答案 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,否则它不会存储到数据库中。


这些只是我对此的看法和经验,所以如果有更多有经验的人认为有问题,我很高兴看到评论并更新我的回答。