2

私はRuby on Railsを学んでおり、この足場コマンドを実行しました:

rails g scaffold 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オブジェクトのリスト、またはあなたの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 に答える