

どちらをクリックしても同じアクションを呼びますが、  
どちらのlinkから呼ばれたかを判断して処理を分けたいです。

このような場合、どのような方法があるのでしょうか？

宜しくお願い致します。

やってみたこと(1)

[code]

    def destroy
        if params[:micropost_type] ='delete'
          @micropost.destroy
          flash[:info] = "目標を諦めました"
          redirect_to request.referrer || root_url and return
        elsif params[:micropost_type] = 'complete'
          @micropost.destroy
          flash[:success] = "目標を達成しました"
          redirect_to request.referrer || root_url 
        end
      end
    
    <%= link_to '諦める', micropost, method: :delete, micropost_type: 'delete' ,data: { confirm: "本当に諦めますか"} %>
    <%= link_to '達成', micropost, method: :delete, micropost_type: 'complete' %>
    
[/code]

やってみたこと(2)

[code]

    def destroy
        if params[:delete]
          @micropost.destroy
          flash[:info] = "目標を諦めました"
          redirect_to request.referrer || root_url and return
        elsif params[:complete]
          @micropost.destroy
          flash[:success] = "目標を達成しました"
          redirect_to request.referrer || root_url 
        end
      end
    
    <%= link_to '諦める', micropost, method: :delete, name: "delete" ,data: { confirm: "本当に諦めますか"} %>
    <%= link_to '達成', micropost, method: :delete, name: "complete" %>
    
[/code]


CC BY-SA 4.0
2018-10-09T18:54:38.370
49115
2020-07-30T03:04:35.377
2018-10-10T00:29:00.760
2238
29168
question
ruby-on-rails ruby
呼び出し元のlink_toによって処理を分けたい場合(method: :delete)


私が直すとするとこんな感じです。

[code]

    def destroy
      if params[:type] == 'give_up'
        flash[:info] = '目標を諦めました'
      elsif params[:type] == 'complete'
        flash[:success] = '目標を達成しました'
      end
      @micropost.destroy
      redirect_to request.referrer || root_url 
    end
    
    <%= link_to '諦める', micropost_path(type: 'give_up'), method: :delete, data: { confirm: '本当に諦めますか' } %>
    <%= link_to '達成', micropost_path(type: 'complete'), method: :delete %>
    
[/code]

ポイントは、

  1. 比較は`==`（`=`では代入になってしまう）
  2. どっちにしろ`destroy`してリダイレクトするなら、if文の外に出して共通化
  3. 通常のルーティングではパスは`xxx_path`となるはず
  4. パラメータは`xxx_path`の引数で与えればいい

です。  
余談ですが、本当はモデル名の`micropost`も変更したいところですが、何を指しているのか不明なので、そのままにしてあります。


CC BY-SA 4.0
2018-10-30T13:45:11.450
49806
2018-10-30T13:45:11.450
7900
49115
answer