【问题标题】:Rails Routing - Not showing an actionRails 路由 - 不显示动作
【发布时间】:2009-08-06 21:49:51
【问题描述】:

我有两条路线:

map.all_devices '/all_devices', :controller => 'all_devices', :action => 'initialize_devices'
map.show_user_date_select '/all_devices', :controller => 'all_devices', :action => 'show_user_date_select'

我希望用户单击按钮,执行 show_user_date_select 操作,然后重定向回 mysite.com/all_devices。上面的路由确实有效,但总是将用户发送到 initialize_devices,这会重置“show_user_date_select”操作。

【问题讨论】:

  • 您能否添加更多关于您想要实现的目标的详细信息?可能有一种更符合 Rails 的方式。

标签: ruby-on-rails routing


【解决方案1】:

看起来您将两者都映射到了同一条路线。由于您将 initialize_devices 放在最上面,因此它会以更高的优先级呈现该设备,这就是您总是得到它的原因。

在路由中你想要的可能是这样的:

map.all_devices '/all_devices', :controller => 'all_devices', :action =>  'index'

然后有表单提交到的不同路由,例如/all_devices/show_user_date_select,然后重定向到/all_devices:

def show_user_date_select
    # do stuff here
    redirect_to all_devices
end

【讨论】:

    【解决方案2】:

    我觉得这些路线有点奇怪。尝试类似:

    map.resources :all_devices, :member => { :all_devices => :get, :show_user_date_select => :get }
    

    那么在你看来:

    <%= link_to "All Devices", path_to_all_devices_all_devices %>
    <%= link_to "Show Dates", path_to_show_user_date_select_all_devices %>
    

    链接名称很糟糕,但应该适用于您现有的应用程序。我宁愿看到:

    map.resources :devices, :member => { :all => :get, :select => :get }
    
    <%= link_to "All Devices", path_to_all_devices %>
    <%= link_to "Show Dates", path_to_select_devices %>
    

    但这需要你做一些工作或重新做。

    【讨论】:

      【解决方案3】:

      看起来该路由明确地将/all_devices 映射到initialize_devices action

      也许您应该在第一次到达initialize_devices 时设置一些特定于会话的信息,并且对后续请求不执行任何操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多