Rails redirect_to无法正常工作,重定向到显示而不是自定义操作

时间:2012-03-14 21:20:30

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 redirecttoaction

所以我有一个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"}
  ..............

任何人都可以解释如何解决这个问题吗?

修改: 我假设这是你想要的......我的routes.rb的相关部分:

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

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

get "chats/logout"

..是的,它有点像一个大杂烩:/

1 个答案:

答案 0 :(得分:1)

您似乎正在努力实现以下目标:

  • 查找与给定搜索字符串匹配的所有聊天
  • 如果找到1个聊天,则重定向到
  • 如果找到2个以上的聊天记录,请重定向到/chats/decide,以便用户可以选择一个

我会按如下方式实现:

1)更新 routes.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)当您列出 decision.html.erb 文件中的可用聊天时,请将它们直接链接到相应的show链接。

4)明确了解聊天#index

中的重定向
redirect_to :controller => 'chats', :action => 'decide'

您的聊天<决定操作不应根据是否收到id而做出不同的响应。您可以直接链接到该视图中的特定聊天。