Rails redirect_to не работает, перенаправление, чтобы показать вместо пользовательских действий - PullRequest
0 голосов
/ 15 марта 2012

Итак, у меня есть ChatsController, и из моего действия с индексом я пытаюсь перенаправить на настраиваемое действие «решить»:

def index
  @chat = Chat.customfind(params[:search])
  if(@chat.is_a?(Array))
    session[:chats] = @chat
    redirect_to :action => 'decide'
  else
  respond_to do |format|
    format.html { redirect_to @chat if !@chat.nil? }
  end
end

def decide
  @chats = session[:chats]
  @choice = Chat.find(params[:id])
  redirect_to @choice if !@choice.nil?
end

.. где @choice будет определяться параметрами формы на странице выбора. Но по какой-то причине, вместо перенаправления для принятия решения, Rails перенаправляет, чтобы показать:

Started GET "/chats/decide" for 127.0.0.1 at 2012-03-14 17:13:36 -0400
  Processing by ChatsController#show as HTML
  Parameters: {"id"=>"decide"}
  ..............

Может кто-нибудь объяснить, как это исправить?

Edit: Я предполагаю, что это то, что вы хотите ... соответствующие части моих маршрутов.rb:

match "chats/decide" => "chats#decide"

resources :chats do
  member do
    post 'send_message'
  end
end

get "chats/logout"

.. да, это немного мешанина: /

1 Ответ

1 голос
/ 15 марта 2012

Похоже, вы пытаетесь достичь следующего:

  • Найти все чаты, соответствующие заданной строке поиска
  • Если найден 1 чат, перенаправьте на него
  • Если найдено 2+ чатов, перенаправьте на /chats/decide, чтобы пользователь мог выбрать один

. Я бы реализовал это следующим образом:

1) Обновление rout.rb следующим образом:

resources :chats do
  member do
    post :send_message
  end

  collection do
    get :decide # Produces the '/chats/decide/' route
  end
end

2) Измените действие чаты # решить на следующее:

def decide
  @chats = session[:chats]
end

3) Когда вы перечислите доступные чаты вВаш сам файл решения.html.erb , свяжите их непосредственно с соответствующей ссылкой show.

4) Будьте откровенны в отношении вашего перенаправления в чатах # index :

redirect_to :controller => 'chats', :action => 'decide'

Ваши чаты # решают действие не должно реагировать по-разному в зависимости от того, получает оно id или нет.Вы можете напрямую связываться с конкретными чатами в этом представлении.

...