私はruby1.9.2とrails3を使用していますが、ルーティングに関して適度に単純な問題が発生していると思います。
というモデルがありAdvancedQuery
ます。そのコントローラーはAdvancedQueriesController
です。 ルーティングを除いて、ほとんどすべてが標準のレール方式で行われます。URLの名前を変更したかったのですが、他にもいくつか変更したかったのです(以下を参照)。
これが私のroutes.rbファイルの関連部分です
get "advanced_query" => "advanced_queries#new", as: :new_advanced_query
post "advanced_query(/:hash_value)(/:page)" => "advanced_queries#create", as: :create_advanced_query
get "advanced_query/:hash_value(/:page)" => "advanced_queries#search", as: :advanced_query_search
AdvancedQueryを使用するときに期待する動作は次のとおりです。
- ユーザーはhttp:// localhost:3000 / advanced_query(get request)にアクセスし、ブラウザーはで「new」メソッドを呼び出します
advanced_queries_controller
。new.html.haml
がレンダリングされ、ユーザーに入力する標準フォームが表示されます。 - 次に、ユーザーは検索フォームにデータを入力し、[送信]を押します
- 「Submit」は「create」メソッドを呼び出し、データベースに「AdvancedQuery」レコードを作成します。AdvancedQueryオブジェクトには32文字のハッシュが関連付けられており、1)クエリを識別し、2)結果のURLの一部として使用されます(手順4を参照)。
- createメソッドは、AdvancedQueryオブジェクトを使用して2番目のモデル(BusinessModelと呼ばれる)を検索する「search」メソッドにリダイレクトします。次に、サーバー
search.html.haml
はAdvancedQueryの結果をレンダリングして表示し、ユーザーが新しい検索を実行したい場合に備えて、結果と同じページに元のフォームを再レンダリングします。ここで生成されるURLは次のとおりです。http:// localhost:3000 / advanced_query / blah(ここで、blahは、クエリに特に関連付けられている32文字のハッシュです)。 - ここで、ユーザーはステップ3で生成されたWebページのフォームを使用して新しい検索語を入力します。ユーザーは「送信」を押すと、「作成」メソッドが再度呼び出されます(つまり、ステップ3と4をやり直します)。つまり、新しいAdvancedQueryを作成します。
これが実際に起こることです:
手順1〜4は期待どおりに機能します。ステップ5でルーティングエラーが発生します"No route matches "/advanced_query"
new.html.haml
とファイルの両方がsearch.html.haml
同じ部分をレンダリングします(と呼ばれます_form.html.haml
)。
したがって、を見ると_form.html.haml
、実際には何も問題はありません。
= form_for(@advanced_query, url: create_advanced_query_path) do |f|
.actions
# other generic form-related stuff
これが私のコントローラーの関連部分です
def new
@advanced_query = AdvancedQuery.new
end
def create
advanced_query = AdvancedQueryBuilder.build_advanced_query_from_post(request, params, current_user)
redirect_to(advanced_query_search_path(hash_value: advanced_query.hash_value))
end
def search
return render :bad_request unless request.get?
@advanced_query = AdvancedQuery.find_by_hash_value_and_user_id(params[:hash_value], current_user.id)
@results = BusinessModel.advanced_search(@advanced_query)
end
ルーティングエラーの原因について何か考えはありますか?
ありがとう!