2

以下尝试似乎是有效的,但不是我试图归档的“干净”结果。

跟随路线

get "/learn(/:category)", to: "users#index", as: "learn"

应该可用于“/learn/technology”之类的东西- 如果在地址栏中手动输入,它会起作用。

如果我在我的观点中努力实现类似的目标,我会得到以下信息:“/learn?category=technology” - 这在技术上是可行的,但不是我想要的。

我在我的视图中使用以下内容:

- Category.promoted.limit(7).each do |category|
  %li.category-button
    = link_to learn_path(category) do
      = button_tag "", :class => "#{category.name}"
      = content_tag(:span, category.to_s, :class => 'category-head')

我的类别模型如下所示:

class Category < ActiveRecord::Base
  has_many :skills

  validates_uniqueness_of :name

  scope :promoted, lambda { where(:promoted => true) }

  def to_s
    read_attribute(:name).titleize
  end

  def to_param
    name.parameterize
  end
end

我将如何实现“更清洁”的解决方案?

编辑:

以下作品 - 但必须有比这更好的解决方案吗?

get "/learn", to: "users#index", as: "learn"  
get "/learn/:category", to: "users#index", as: "filter_learn"
4

2 回答 2

0

尝试将您的链接更改为以下内容:

...
= link_to learn_path(category: category.name) do
...
于 2013-05-03T07:04:33.467 回答
0

您可以使用url_for来解决问题。

假设我有UsersController行动index,这在routes.rb

resources :users, only: [:index] do
  collection do
    get ':kind', :to => 'users#index'
  end
end

然后,当我在 /users 页面上时,我可以使用url_for这种方式:

= link_to 'Kind1', url_for(kind: :students)

这将产生路径:

/users/students

如果我在另一个页面上(另一个控制器或另一个动作),那么我应该提供更多信息。例如,当我在另一个控制器的页面上时,如果没有目标操作,我应该同时提供controlleraction参数index(如果目标操作是,index那么只提供就足够了controller):

= link_to 'Kind1', url_for(controller: :users, action: :index, kind: :students)

它产生相同的路径:

/users/students

使用users_path(kind: :students)时您将获得:

/users?kind=students
于 2013-11-14T10:43:25.500 回答