Передача дополнительного параметра через ссылку
В моем приложении у меня есть таблицы пользователей и действий, а у пользователя три действия.
У меня есть домашняя страница с тремя кнопками. Если пользователь нажимает кнопку 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.
Не используйте глобальные переменные. Переменная экземпляра будет просто отлично.