9

モデル(クラス)のコンテンツを表示するビューをレンダリングするアクション「承認」があります。acceptビュー内に、URLパラメーター(:id)で呼び出すlink_toがあります。アクションが完了した後(承認をtrueに設定) 、メッセージ( "保存済み!")を付けて再度acceptレンダリングしたいと思います。approvalただし、静的ログインページとは異なり、承認アクションでは、最初に呼び出されたときにパラメータが必要です。2回目にレンダリングされると、ランタイムエラーが発生します(明らかに)。approvalフラッシュ通知で電話をかける最良の方法は何ですか?

def approval
  @c = Class.find(params[:id])
end


def accept
  @c = Class.find(params[:id])
  @c.approve = true
  @c.save

  render 'approval', :notice => "Saved!"
end
4

3 に答える 3

7

render 'approval', :notice => "Saved!"これをに変更します

flash[:notice] = "Saved!"
redirect_to :back
于 2012-06-27T04:40:14.157 に答える
3

FlashHash#now現在のアクションの通知を設定するために使用できます

flash.now[:notice] = 'Saved !'
render 'approval'

http://api.rubyonrails.org/classes/ActionDispatch/Flash/FlashHash.html#method-i-now

于 2014-02-05T14:17:43.450 に答える
2

抜粋: http: //www.perfectline.ee/blog/adding-flash-message-capability-to-your-render-calls-in-rails

これで、コントローラーの一般的なパターンは次のようになります。

if @foo.save
  redirect_to foos_path, :notice => "Foo saved"
else
  flash[:alert] = "Some errors occured"
  render :action => :new
end

私がしたいのはこれです:

if @foo.save
  redirect_to foos_path, :notice => "Foo saved"
else
  render :action => :new, :alert => "Some errors occured"
end

この機能の追加は実際には非常に簡単です。レンダリング関数を拡張するコードを作成するだけです。この次のコードは、リダイレクト呼び出しの機能を含むモジュールを実際に拡張します。

module ActionController
  module Flash

    def render(*args)
      options = args.last.is_a?(Hash) ? args.last : {}

      if alert = options.delete(:alert)
        flash[:alert] = alert
      end

      if notice = options.delete(:notice)
        flash[:notice] = notice
      end

      if other = options.delete(:flash)
        flash.update(other)
      end

      super(*args)
    end

  end
end
于 2013-10-24T02:46:37.060 に答える