2

我正在学习 Ruby on Rails,我做了这个脚手架命令:

rails g scaffold Alex

它运行并为我创建了所有资源。所以我试图从我的索引页面链接到 alex 页面,如下所示:

<%= link_to "Alex Link", alex_path(@alex) %>

(我仍然不确定@alex 部分是什么,但它在其他示例中,所以我试图在那里拥有它)

在我的 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

我建立链接的方式有什么问题,我怎样才能让它在进入视图之前击中控制器?

谢谢!

4

1 回答 1

3

alex_path用于显示特定 Alex对象。要使用它,@alex需要是Alex控制器加载的对象的实例。

你说你想链接到“Alex 页面”,这让我觉得你想要所有 Alex对象的列表,或者index你的AlexController. 如果是这种情况,您应该使用alexes_path而不是alex_path(@alex).

如果您确实想链接到单个特定的Alex,则需要从数据库中加载一个实例:

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

顺便说一句,您还问:

我怎样才能让它在进入视图之前击中控制器?

您的控制器将始终在视图呈现之前被击中。如果不调用操作,就不可能呈现视图。

于 2012-04-09T19:19:56.143 回答