0

こんにちは、これが私の問題です。

すべてのコントローラーは、ブラウザーでは常に404エラーを返しますが、ログでは次のようになります。

Processing PostController#index (for myip at 2013-02-01 13:33:02) [GET]
Rendering post/index
Completed in 2ms (View: 1, DB: 0) | 200 OK [http://site.com/]

そして、/public内のファイルは正常にロードされます。私のroutes.rb:

map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'

あなたの助けを願っています。

4

2 に答える 2

1

/controller/action/idあなたのルートはあなたが常に以下またはに一致する必要があることを意味します/controller/action/id.format。新しいrailsプロジェクト用に生成されたもののような括弧を使用する必要があります。これを行うべきではない理由についてのコメントに注意してください

# This is a legacy wild controller route that's not recommended for RESTful  applications.
# Note: This route will make all actions in every controller accessible via GET requests.
# match ':controller(/:action(/:id))(.:format)'
于 2013-02-01T09:52:47.620 に答える
0

コントローラを機能させる簡単な方法は、ルートにリソースを追加することです。これにより、すべてのコントローラーメソッドがマップされます。

# app/controllers/controllernames_controller.rb
class ControllernamesController < ApplicationController
  def index
  end

  # and other methods you want...
end

# config/routes.rb
MyApp::Application.routes.draw do
   resources :controllername
end

あなたのリンクはhttp://localhost/controllernames/methodname/id

次に、ビューファイルに次の方法でリンクを追加できます。

<%= link_to "whatever_your_like_to_name", controllernames_path %>

Railsが提供するRESTfulスキャフォールディングを使用する場合は、次のことができます。

<%= link_to "whatever_your_like_to_name", new_controllername_path %>
# or
<%= link_to "whatever_your_like_to_name", edit_controllername_path(controllername) %>
# or 
etc...

コントローラから単一のメソッドを取得する別の方法では、次のルートを実行できます。

# config/routes.rb
MyApp::Application.routes.draw do
   get 'controllernames/methodname', to: 'controllernames#methodname', as: "whatever_you_want"
end

この場合、ビューファイル内のリンクは次のようになります。

<%= link_to "whatever_you_like_to_name", whatever_you_want_path %>
于 2013-02-01T09:56:19.580 に答える