Как запомнить значение параметра между страницами в контроллере - PullRequest
5 голосов
/ 15 февраля 2011

Мне удалось создать серию из трех кнопок на странице индекса, позволяющую пользователю идентифицировать подмножество объектов в базе данных - кнопка 1 - тип = "новый", кнопка 2 - тип = "используется", кнопка3 - без ограничений, т.е. может быть новым или использованным.

В настоящее время index.html.erb содержит:

<%= link_to "New", :controller => params[:controller], :action => params[:action],    :product_type => 'New' %>
<%= link_to "Used", :controller => params[:controller], :action => params[:action], :product_type => 'Used' %>
<%= link_to "Don't Restrict", :controller => params[:controller], :action => params[:action], :product_type => nil %>

В пределах product.rb у меня есть:

scope :by_product_type, lambda{|product_type| where(:product_type => product_type) unless product_type.nil? }

Наконец, у меня есть productfinder_controller:

before_filter :load_grips, :only => [:index, :bybrand, :bycolour, :byprice]
protected
def load_products
if params[:product_type]
  @productssmatchingtype = Product.by_product_type(params[:product_type])
else
  @productsmatchingtype = Product
end
end

Приведенный выше код работает точно так, как я и ожидал, загружая все элементы изначально и ограничивая их, если нажата кнопка 1 или кнопка 2.

Я также хотел быиметь аналогичную функциональность на 3 других страницах контроллера Productfinder, а именно byprice, bybrand и bycolour.Я поместил один и тот же код, как указано выше, в каждый из этих 3 других файлов .html.erb, и снова все выглядит так, как будто он ведет себя ...

ИСКЛЮЧИТЬ - при загрузке новой страницы по умолчанию всепродукты показаны, т.е. он не запомнил, какую кнопку пользователь нажал на предыдущей странице.Можно ли хранить информацию о нажатой кнопке, доступной для всех страниц контроллера?Аналогично или в качестве альтернативы, возможно ли определить @productsmatchingtype (в productfinder_controller) таким образом, чтобы он был доступен для всех страниц и ему не нужно было начинать заново с нуля?

1 Ответ

7 голосов
/ 15 февраля 2011

Вы не можете запомнить переменные между запросами.Однако вы можете хранить product_type в сеансе:

def load_products
  #get product_type from session if it is blank
  params[:product_type] ||= session[:product_type]
  #save product_type to session for future requests
  session[:product_type] = params[:product_type]
  if params[:product_type]
    @productssmatchingtype = Product.by_product_type(params[:product_type])
  else
    @productsmatchingtype = Product
  end
end

Это должно сделать работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...