【问题标题】:Rails Resources are giving me headacheRails 资源让我头疼
【发布时间】:2010-12-01 05:21:16
【问题描述】:

我是一名 .NET 开发人员,正在转向 Ruby on Rails。我一直在 ASP.NET MVC 中编程,现在尝试将相同的概念应用于 Rails。我创建了索引操作,现在当我说 home/index 时,它会自动重定向我不存在的“显示”操作。我的 routes.rb 文件有这一行:

资源:主页

home 是 home_controller。

我做错了什么?

class HomeController < ApplicationController

  def show

  end

  # show all the articles 
  def index

    @articles = Array.new[Article.new,Article.new,Article.new]

    respond_to do |format|
      format.html 
      format.xml { render :xml => @articles }
    end

  end

  def new 
    @article = Article.new

    respond_to do |format|

      format.html 
      format.xml { render :xml => @article }

    end

  end



  def create

    @article = Article.new(params[:post]);

    if @article.save 

      format.html { redirect_to(@post,
              :notice => 'Post was successfully created.') }

    end


  end

  def confirm 
  end

end

【问题讨论】:

  • 你的控制器是什么样的?
  • 我更新了上面的代码以包含控制器的实现!

标签: ruby-on-rails


【解决方案1】:

您可以运行“rake routes”来查看 rails 对您的路由的看法以及哪些 url 将被分派到哪些控制器。

在你的情况下,我得到:

home_index GET    /home(.:format)           {:action=>"index", :controller=>"home"}
home_index POST   /home(.:format)           {:action=>"create", :controller=>"home"}
  new_home GET    /home/new(.:format)       {:action=>"new", :controller=>"home"}
 edit_home GET    /home/:id/edit(.:format)  {:action=>"edit", :controller=>"home"}
      home GET    /home/:id(.:format)       {:action=>"show", :controller=>"home"}
      home PUT    /home/:id(.:format)       {:action=>"update", :controller=>"home"}
      home DELETE /home/:id(.:format)       {:action=>"destroy", :controller=>"home"}

所以要执行索引操作,您需要转到“/home”。如果你去“/home/index”,它会认为“index”是资源的ID,从而调度到show action。

然而,在 Rails 中,控制器通常使用复数名称,并以它们所代表的资源命名(这通常是一个模型,但不是必须的)。因此,在您的情况下,控制器的名称应该是“ArticlesController”,并且您的 routes.rb 应该包含“resources :articles”。 Rails 对复数和单数名称非常敏感。

使用您正在访问的资源的复数名称的一大优势是,您现在可以使用短符号,例如“redirect_to @article”、“form_for @article do |f|”等。

因此,Rails 中的资源应该能够说明您想要实际得到什么。这也有助于维护,因为其他开发人员不必猜测。如果您发现自己需要多个 ArticlesController,请考虑使用命名空间,或者尝试确定其中一个控制器是否实际上是另一种资源(即使它们将数据存储在同一个数据库表中)。

有关路由器的更多信息可以在 Rails 指南中找到:http://guides.rubyonrails.org/routing.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    相关资源
    最近更新 更多