注文には多くの州があります。私はそれらの名前付きルートを作成したいと思います。私は状態をパラメータとしてコントローラに渡す必要があります。ここで私が考えていたことはありますが、明らかに機能しません。Railsルーティング変数
match "order/:state/:id" => "orders#%{state}", as: "%{state}"
したがって、order/address/17はorders#addressにルーティングします。stateと:idはparamsとして渡されます。同様に、order/shipping/17はorders#shippingにもルーティングされます:stateと:idは渡されます。
ここにコントローラがあります。ここで
class OrdersController < ApplicationController
before_filter :load_order, only: [:address, :shipping, :confirmation, :receipt]
before_filter :validate_state, only: [:address, :shipping, :confirmation, :receipt]
def address
@order.build_billing_address unless @order.billing_address
@order.build_shipping_address unless @order.shipping_address
end
def shipping
@shipping_rates = @order.calculate_shipping_rates
end
def confirmation
end
def receipt
end
private
def load_order
@order = Order.find(params[:id])
end
# Check to see if the user is on the correct action
def validate_state
if params[:state]
unless params[:state] == @order.state
redirect_to eval("#{@order.state}_path(:#{@order.state},#{@order.id})")
return
end
end
end
end
私たちは一緒に行くことになったものです:あなたはするつもりはありません
routes.rbを
%w(address shipping confirmation receipt).each do |state|
match "order/#{state}/:id", :to => "orders##{state}", :as => state, :state => state
end
orders_controller.rb
def validate_state
if params[:state]
unless params[:state] == @order.state
redirect_to(eval("#{@order.state}_path(@order)"))
return
end
end
end
あなたのURLが「/ order/address/17」の場合、状態情報はどこから取得されますか?これが意図されたURLでない場合、それは何ですか? –
私はちょうど私がやっていることのもう少しを示すためにそれを編集しました。 –