1

在我的应用程序中,我有用户和活动表,用户有三个活动。

我有一个主页,上面有三个按钮。如果用户按下按钮 1,我想导航到活动索引页面并将属性设置activity_type为 = 1。如果用户按下按钮 2,我想导航到活动索引页面并将其设置activity_type2等。

现在我有:

<%= 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_var为 3。

不要使用全局变量。一个实例变量就可以了。

于 2016-01-31T17:10:45.033 回答