私はruby 1.9.2とレール3を使用していますが、私はルーティングに関してやや単純な問題があると思います。rails 3 routing question(ルーティングエラー "No route matches ...")
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に行きますブラウザは
advanced_queries_controller
の "new"メソッドを呼び出します。new.html.haml
がレンダリングされ、ユーザーに記入する標準フォームが表示されます。 - ユーザーは検索フォームにデータを入力し、「送信」を押します。
- 「送信」は「作成」メソッドを呼び出し、データベースに「AdvancedQuery」レコードを作成します。 AdvancedQueryオブジェクトには、1)クエリを識別し、2)結果のURLの一部として使用する32文字ハッシュが関連付けられています(手順4を参照)。
- createメソッドは、AdvancedQueryオブジェクトを使用して2番目のモデル(BusinessModel)を検索する「検索」メソッドにリダイレクトされます。サーバーは次に
search.html.haml
をレンダリングし、AdvancedQueryの結果を表示し、ユーザーが新しい検索を実行する場合の結果と同じページに元のフォームを再レンダリングします。ここで生成されるURLはhttp://localhost:3000/advanced_query/blahです(blahはクエリに特に関連する32文字のハッシュです)。 - ステップ3で生成されたWebページのフォームを使用して新しい検索語を入力します。彼は「submit」を押して、「create」メソッドを再度呼び出す必要があります(ステップ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
私のルーティングを引き起こしているもの上の任意の考えがありますエラー?
ありがとうございます!
正しいとは言えませんが、指摘している構文の問題を修正しても、同じルーティングエラーが発生します。 routes.rbファイルの私の新しい行は:post "advanced_query /(:hash_value(/:page))" – user141146
おっと、ごめんなさい - 上記の私の編集を参照してください。 /は、カッコの内側でなければならず、外側ではありません。 –
ありがとうございます。私はあなたが何を言おうとしているのか理解していました(オプションの "slugs"の構文は間違っていました)が、POSTを実行していると思ったときに私のフォームが "PUT"しかし、それがなぜであるか分かりません。 – user141146