web-dev-qa-db-ja.com

Rails:redirect_to:controller => 'tips'、:action => 'show'、:id => @ tip.permalink

Railsコントローラ、アクション、パラメータを渡してアクションを表示するようにリダイレクトしようとしました。しかし、Railsはアクションの名前を完全に無視します!

私が得たものは http:// mysite/controllername/paramId

だから私はエラーメッセージを持っています...

これが私が使ったアクションコードです:

def update
    @tip = current_user.tips.find(params[:id])
    @tip.attributes = params[:tip]
    @tip.category_ids = params[:categories]
    @tip.tag_with(params[:tags]) if params[:tags]


    if @tip.save
      flash[:notice] = 'Tip was successfully updated.'
      redirect_to :controller=>'tips', :action => 'show', :id => @tip.permalink
    else
      render :action => 'edit'
    end
  end 
19
john

なぜフレームワークと戦うのですか?

redirect_to @tip

また、:noticeオプションを使用してコードを短縮できます。

redirect_to @tip, :notice => 'Message here'
35
Samuel

そのRESTリソースルートの場合、ルーティングは実際に正しいです。GETリクエスト/tips/idは実際にshowアクションを呼び出します。ルーティングの方法が原因で、私の推測ではmap.resources、これは正しいです。

7
alternative