通过链接传递额外参数

时间:2016-01-31 17:05:12

标签: ruby-on-rails ruby hyperlink parameters object-relationships

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

我有一个主页,上面有三个按钮。如果用户按下按钮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 %>

无论我从主页选择什么链接,&#34;社区活动&#34;显示在视图上,意味着activity_type似乎总是为3.我不认为它正在识别activity_type我正在通过主页中的链接。

有不同的方法可以做到这一点,还是我做错了?

1 个答案:

答案 0 :(得分:1)

您在链接中传递了一个整数(:activity_type => 1),但所有内容都以字符串形式发送到Rails中。所以params[:activity_type]是一个字符串,而不是整数(即。&#34; 1&#34;不是1)。因此,当您执行case声明时,您正试图比较&#34; 1&#34;到1,2或else。自"1" != 1&#34; (或2)你的情况总是使用默认情况并将$activity_type_var设置为3。

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