1

私のアプリケーションには、ユーザー テーブルとアクティビティ テーブルがあり、ユーザーには 3 つのアクティビティがあります。

3 つのボタンがあるホームページがあります。ユーザーがボタン 1 を押したら、アクティビティのインデックス ページに移動し、属性activity_typeを =に設定します1。ユーザーがボタン 2 を押した場合、アクティビティ インデックス ページに移動し、 などに設定しactivity_typeます2

今私は持っています:

<%= link_to 'Personal Activity', user_activities_path(:user_id => current_user.id, :activity_type => 1) %>
<%= link_to 'Physical Activity', user_activities_path(:user_id => current_user.id, :activity_type => 2) %>
<%= link_to 'Community Activity', user_activities_path(:user_id => current_user.id, :activity_type => 3) %>

私のアクティビティコントローラーindexメソッドには次のものがあります。

class ActivitiesController < ApplicationController

  def index
    @activities = Activity.all

    @activity_type = params[:activity_type]

    case @activity_type
    when 1
      $activity_type_var = 1
    when 2
      $activity_type_var = 2
    else
      $activity_type_var = 3
    end
  end

私は活動/index.html.erbにこれを持っています:

 <% if $activity_type_var == 1 %>
        <%= "Personal Activity" %>

<% elsif $activity_type_var == 2 %>
        <%= "Physical Activity" %> 

<% elsif $activity_type_var == 3 %>
        <%= "Community Activity" %> 
<% else %>
        <%= "NOT WORKING" %>      
<% end %>

ホームページからどのリンクを選択しても、ビューに「コミュニティ アクティビティ」が表示されます。つまり、activity_type常に 3 のように見えactivity_typeます。

これを行う別の方法はありますか、それとも間違っていますか?

4

1 に答える 1

1

リンク ( ) で整数を渡しています:activity_type => 1が、すべてが文字列として Rails に送信されます。整数ではなく文字列も同様です (つまりparams[:activity_type]、1 ではなく "1")。したがって、caseステートメントを実行するときは、「1」を 1、2、または と比較しようとしていますelse。そして、"1" != 1" (または 2) 以降、ケースは常にデフォルトのケースを使用し、$activity_type_var3 に設定されます。

グローバル変数を使用しないでください。インスタンス変数で十分です。

于 2016-01-31T17:10:45.033 に答える