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

Tal*_*boy 6 ruby rest ruby-on-rails ruby-on-rails-3

我真的很困惑如何做到这一点.

我也很累,也很沮丧,看着这么多不同的东西,我的大脑也在受伤.

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

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

  3. 如果这是不好的做法,那么我该如何手动创建它们呢?我在网上看到的所有教程都是"只是打字resource :user而且你很好!它不会说如果你不想要/需要它们怎么做

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

  5. 鉴于我留下所有网址相同.如果我转到/ 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"
Run Code Online (Sandbox Code Playgroud)

如果我有资源:我的路线中的资源我不知道为什么它不会自动转到资源#create:

  def create
    @resource = Resource.new(params[:resource])
  end
Run Code Online (Sandbox Code Playgroud)

谢谢!

顺便说一句,这是我的路线中的最新情况,万一有任何明显的错误

  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'
Run Code Online (Sandbox Code Playgroud)

pdu*_*ler 12

1.保留未使用的REST操作是不好的做法?
只要我能回答这个问题,这并不是一种糟糕的做法.如果您不需要控制器的索引操作,则没有它,句点.但你应该在你的路线中排除这种行为,例如做resource :resources, :except => [:index].当您从错误中解救时,这可能会变得很方便,因为NoTemplateError与RoutingError不同(这意味着您可能会错过在生产中挽救某些东西).

此外,它是一个很好的开发小帮手.当您意外地写入未使用的控制器索引的链接时,如果您排除了路径中的操作,则会在包含该链接的页面上出现错误.如果你不这样做,你只会在点击链接后看到错误,因为路线有效(但没有功能/模板/无论如何).

2.上述情况听起来像我这样做吗?我希望它在home #index中列出所有资源而不是资源#index?
如果不了解业务逻辑/应用程序工作流程,我无法回答这个问题.但如果你不需要它,你就离开它.

如果它是一个美化问题(例如,资源#index基本上是需要的,但在另一个网址下),你可以创建一个路由match "home", :to => "resources#index".这会弃用您的自定义家庭控制器,您可以使用您的索引操作,resources该操作可在其/home下使用/resources.但同样,这可能不是您的工作流程/逻辑的最佳选择,所以这只是一个建议.

3.如果这是不好的做法,那么我该如何手动创建它们呢?Rails指南
页面上有一个关于您所有路由需求的优秀页面.看看那里.

4.如果我想更改默认的网址怎么办?
Rails方式是约定优于配置.意味着那些方法是rails惯例.坚持这个惯例很好,所以每次你回到你的应用程序改变的东西,你至少知道它是如何工作的,因为这个约定.即使是没有任何应用程序知识的导轨编码器,当每个人都坚持这种惯例时,也可以更快地对其进行修改.这个RoR与PHP有趣的广告解释了这个非常好.

可以改变那些,但你不应该.

鉴于我留下的所有网址都是一样的.如果我转到/ 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
Run Code Online (Sandbox Code Playgroud)

请记住.new会创建一个新对象,但除非您在其上调用.save,否则它不会存储到数据库中.


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