我正在学习ruby on rails,我执行了这个scaffolding命令:

rails g scaffold Alex

它为我创造了所有的资源。所以我试着从我的索引页链接到alex页,如下所示:
<%= link_to "Alex Link", alex_path(@alex) %>

(我仍然不确定“alex”部分是什么,但是在其他例子中,我试图在那里得到它)
在my routes.rb中创建了以下代码:
  resources :alexes

  get "home/index"

当我试图加载链接时,它给了我一个错误:
No route matches {:action=>"show", :controller=>"alexes"}

以防万一,这里是rake routes的输出:
    alexes GET    /alexes(.:format)          alexes#index
           POST   /alexes(.:format)          alexes#create
  new_alex GET    /alexes/new(.:format)      alexes#new
 edit_alex GET    /alexes/:id/edit(.:format) alexes#edit
      alex GET    /alexes/:id(.:format)      alexes#show
           PUT    /alexes/:id(.:format)      alexes#update
           DELETE /alexes/:id(.:format)      alexes#destroy
home_index GET    /home/index(.:format)      home#index
      root        /                          home#index
      test POST   /test(.:format)            tests#create
  new_test GET    /test/new(.:format)        tests#new
 edit_test GET    /test/edit(.:format)       tests#edit
           GET    /test(.:format)            tests#show
           PUT    /test(.:format)            tests#update
           DELETE /test(.:format)            tests#destroy

我制作链接的方式有什么问题?在链接进入视图之前,我如何使它击中控制器?
谢谢!

最佳答案

alex_path用于显示特定的对象。要使用它,Alex需要是控制器加载的@alex对象的实例。
你说你想链接到“alex页面”,这让我认为你想要所有Alex对象的列表,或者你的Alexindex操作。如果是这样,您应该使用AlexController而不是alexes_path
如果确实要链接到单个特定的alex_path(@alex),则需要从数据库中加载一个实例:

def my_action
  # make a specific Alex object available to the view
  @alex = Alex.find(...)
end

作为旁白,你也会问:
我怎样才能让它在进入视图之前击中控制器?
在呈现视图之前,您的控制器将始终被击中。如果不调用操作,则无法呈现视图。

关于ruby-on-rails - Rails-使用脚手架,错误链接到所创建的新资源,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10078483/

10-15 08:26