2009-12-04 2 views
2

У меня есть выпадающее меню в одном из моих представлений, что позволяет мне выбирать количество изображений на странице. Я хочу запомнить выбор на этой странице, поэтому, когда пользователь возвращается, количество отображаемых изображений - это то, что они выбрали в последний раз.Ruby on Rails - Значение файла cookie отображается только при обновлении

Для достижения этой цели я устанавливаю значение куки внутри контроллера, как этот

if cookies[:per_page].blank? 
    cookies[:per_page] = "50" # this is the default value for a new user and incase the existing user deletes the cookie 
else 
    cookies[:per_page] = params[:noofimages_perpage].to_s # this is the value selected in the drop down 
end 
    @pp = cookies[:per_page] 
    # further processing with the cookie value here 
end 

Но я не получаю значение в печенье [: per_page].

Для проверки значения в куки, я добавил эту линию на мой взгляд

<%= @pp %> 

и вид отображает значение только после обновления.

Части зрения здесь

<select name="noofimages_perpage" onchange="call the controller"> 
<option value="50">50</option> 
<option value="100">100</option> 
<option value="150">150</option> 
</select> 

После прочтения нескольких постов и статей, я понимаю, что печенье запись не будет доступна до последующей обратной передачи.

Некоторые указатели на то, как справиться с этим или работать вокруг, пожалуйста?

Насколько это возможно, я хочу достичь этого, не касаясь базы данных.

Большое спасибо

+0

Почему вы перезаписать значение в состоянии еще с some_var_to_s? Разве вы не должны использовать значение cookie, если оно есть? – MattMcKnight

+0

@MattMcKnight - когда новый пользователь приходит на сайт, cookie еще не существует. Он просматривает изображения и т. Д., Когда создается файл cookie, с 'if cookies [: per_page] .blank?', Затем его выбор или если он не меняет его значение по умолчанию, хранится в «some_var» и отправляется на контроллер для обработки. –

ответ

1

Куки не установлен в контроллере, но в ответ контроллера (потому что это браузер вещь). это означает, что cookie устанавливается, когда страница отображается. вы не можете получить доступ к нему на этой странице, а на следующей странице или обновить.

рассмотреть редирект (на той же странице) в качестве обходного

0

Попробуйте

per_page = cookies[:per_page] 
if per_page.blank? 
    per_page = "50" # this is the default value for a new user and incase the existing user deletes the cookie 
else 
    per_page = params[:noofimages_perpage].to_s # this is the value selected in the drop down 
end 
@pp = per_page 
cookies[:per_page] = per_page 
# further processing with the cookie value here 
end