Как управлять различными видами


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

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

Мой подход заключается в реализации действий и хранить в сессии. Я вставить сюда некоторые соответствующие код, а также:

  # application_controller.rb
  def set_view_type # TODO: here is the part I don't like
    session[:view_type] = params[:view_type]
    redirect_to :back
  end

  # x_controller.rb
  def index
    case session[:view_type].to_sym
    when :box render 'index_box'
    else      render 'index_list'
    end
  end

Затем я использую два link_to (вместо переключателя , как в сайте StackOverflow), чтобы выбрать ракурс, и те, которые должны быть видны в любое время в макете, поэтому я использую application_controller для этого.

ЗЫ: я не знаю, если это правильно задать вопрос, что это еще так, не стесняйтесь ответить прямо там, рядом со мной, я просто думаю, вот я отправляю мое решение, которое я хотел бы быть пересмотрены.



481
6
задан 7 марта 2011 в 08:03 Источник Поделиться
Комментарии
1 ответ

Для участие вам не нравится, вы можете установить before_filter в ApplicationController. Поэтому редирект не будет необходимости. Форма отбора может представить на текущую страницу с параметра "view_type".

#application_controller.rb
before_filter :check_view_type, :only => [:index]

def check_view_type
session[:view_type] = params[:view_type] if params[:view_type].present?
end

В данном конкретном примере я бы предпочел планировкой и частичным видом. Это хорошо описано в направляющие рельсы.

#x/index.html.erb
render :partial => 'item', :layout => current_layout, :collection => @items

#application_controller.rb
helper_method :current_layout

def supported_layouts
[nil]
end

def current_layout
supported_layouts.include? session[:view_type] ? session[:view_type] : supported_layouts.first
end

#x_controller.rb
def supported_layouts
%w[box list]
end

def index
# only index logic
end

2
ответ дан 25 марта 2012 в 01:03 Источник Поделиться