Rails: почему макет приложения по умолчанию не используется? - PullRequest
0 голосов
/ 16 декабря 2010

Я добавил атрибут @sort_by в свой контроллер и инициализировал его значение следующим образом:

class ProductsController < ApplicationController
  def initialize
    @sort_by = :shop_brand
  end
  ...
end

Это привело к тому, что макет приложения по умолчанию не использовался.

Почему?

Как правильно добавить атрибут в контроллер и инициализировать его?

1 Ответ

6 голосов
/ 16 декабря 2010

Переопределение конструктора, вероятно, плохая идея (как вы уже нашли).Вы должны использовать before_filter:

class ProductsController < ApplicationController

  before_filter :set_defaults

  ...

  private

  def set_defaults
    @sort_by = :shop_brand
  end

end

Однако, похоже, вы хотите сохранить состояние.Самый простой - сохранить в сеансе пользователя, который будет автоматически сохраняться для каждого пользователя до тех пор, пока он не закроет браузер:

def set_defaults
  session[:sort_by] ||= :shop_brand
end

Другой вариант - передать текущее значение sort_by в URL.Это сложнее реализовать, хотя вам нужно будет убедиться, что каждая ссылка или форма копирует значение в следующий запрос.Преимущество этого, однако, заключается в том, что пользователь может иметь несколько открытых вкладок с разными порядками, и любая ссылка с закладкой восстановит тот же порядок в следующий раз.Это подход, который будут использовать такие вещи, как поисковые системы.

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