我正在尝试使用Rails,我偶然发现了我的路由问题。
我有一个名为“Account”(单数)的控制器,它应该处理当前登录用户的各种设置。
class AccountController < ApplicationController
def index
end
def settings
end
def email_settings
end
end
我如何以适当的方式为此设置路线?目前我有:
match 'account(/:action)', :to => 'account', :as => 'account'
然而,这并不会自动生成account_settings_path
等方法,而只会生成account_path
有没有更好的做法?请记住,Account
控制器不代表ActiveModel的控制器。
如果这实际上是最佳做法,我如何在视图中为操作生成链接? url_to :controller => :account, :action => :email_settings
?
谢谢!
答案 0 :(得分:3)
要获取要在视图中使用的命名URL,您需要指定要在routes.rb
中命名的每个路由。
match 'account', :to => 'account#index'
match 'account/settings', :to => 'account#settings'
match 'account/email_settings', :to => 'account#email_settings'
或者
scope :account, :path => 'account', :name_prefix => :account do
match '', :to => :index, :as => :index
match 'settings', :to => :settings
match 'email_settings', :to => :email_settings
end
两者的作用相同,这只是一个选择问题。但我确实认为第一种方法是最干净的,即使它不是DRY。
答案 1 :(得分:0)
您还可以将其定义为资源上的集合:
resources :login do
collection { get :reminder, :test }
end
当然,这也定义了默认的CRUD操作。我目前只使用其中两个用于我的非实际模型控制器,但我不认为/预计额外路线会有任何问题。