Передача дополнительного параметра через ссылку

В моем приложении у меня есть таблицы пользователей и действий, а у пользователя три действия.

У меня есть домашняя страница с тремя кнопками. Если пользователь нажимает кнопку 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 Я прохожу по ссылке на главной странице.

Есть ли другой способ сделать это, или я делаю это неправильно?

1 ответ

Вы передаете целое число в вашей ссылке (:activity_type => 1), но все отправляется как строка в Rails. Так params[:activity_type] является строкой, а не целым числом (т. е. "1", а не 1). Поэтому, когда вы делаете свой case утверждение, которое вы пытаетесь сравнить "1" с 1, 2 или else, И с тех пор "1" != 1" (или 2) ваш случай всегда будет использовать случай по умолчанию и установить $activity_type_var до 3.

Не используйте глобальные переменные. Переменная экземпляра будет просто отлично.

Другие вопросы по тегам