ruby 优雅的轨道:多个路由,同一控制器操作

tquggr8v  于 2023-10-18  发布在  Ruby
关注(0)|答案(2)|浏览(99)

让多个路由指向同一个控制器动作的最优雅的方法是什么?
我有:

get 'dashboard', to: 'dashboard#index'
  get 'dashboard/pending', to: 'dashboard#index'
  get 'dashboard/live', to: 'dashboard#index'
  get 'dashboard/sold', to: 'dashboard#index'

太难看了。有什么更优雅的建议吗?
一句话的加分。

bgtovc5b

bgtovc5b1#

为什么不只有一个路由和一个控制器动作,并根据传递给它的参数来区分功能?

config/routes.rb:

get 'dashboard', to: 'dashboard#index'

app/controller/dashboard_controller.rb

def index
  ...
  if params[:pending]
     # pending related stuff
  end
  if params[:live] 
    # live related stuff
  end
  if params[:sold] 
    # sold related stuff
  end     
  ...
end

视图中的链接

  • 挂起:<%= link_to "Pending", dashboard_path(pending: true) %>
  • 现场:<%= link_to "Live", dashboard_path(live: true) %>
  • 出售:<%= link_to "Sold", dashboard_path(sold: true) %>
t98cgbkg

t98cgbkg2#

我正在使用类似的东西,但阅读一些评论可能会误导或反模式。
config/routes.rb中:
get 'dashboard/:action_name' => 'dashboard#index'
然后在app/controller/dashboard_controller.rb中:

def index
    ...
    action_name = request.original_url.split('/').last
    case action_name
    when "pending"
      # pending related stuff
    when "live"
      # live related stuff
    when "sold"
      # solde related stuff
    else
      # else related stuff
    end
    ...
end

这里唯一的问题是,我不知道如何适合您的第一个选项**(没有一个动作名称)**在这个解决方案。
希望对你有用。

相关问题