【问题标题】:Rails redirect_to not working, redirecting to show instead of custom actionRails redirect_to 不工作,重定向到显示而不是自定义操作
【发布时间】:2012-03-31 09:55:49
【问题描述】:

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

..where @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"

..是的,这有点大杂烩:/

【问题讨论】:

  • 显示你的 routes.rb 文件
  • 你想让/chats/decide/:id工作吗?

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


【解决方案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) 将您的 chats#decide 操作更改为:

def decide
  @chats = session[:chats]
end

3) 当您在 decide.html.erb 文件中列出可用聊天时,将它们直接链接到相应的 show 链接。

4) 在 chats#index 中明确说明您的重定向:

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

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

【讨论】:

  • 那么为什么“收集”有效?与“会员做”相反,或者只是获取“聊天/操作名”之类的东西
  • collection 期望列出对象的集合,从而提供路由/chats/decidemember 期望列出单个对象,从而提供路由/chats/:chat_id/decide
猜你喜欢
  • 2017-09-05
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2017-10-21
  • 2018-01-05
  • 1970-01-01
  • 2015-03-29
  • 1970-01-01
相关资源
最近更新 更多