以下尝试似乎有效,但不是我试图存档的“干净”结果。
以下路线
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"
答案 0 :(得分:0)
尝试将您的链接更改为以下内容:
...
= link_to learn_path(category: category.name) do
...
答案 1 :(得分: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
如果我在另一个页面(另一个控制器或其他操作),那么我应该提供更多信息。例如,当我在另一个控制器的页面上时,如果目标操作不是controller
,那么我应该提供action
和index
参数(如果目标操作是index
那么它是足以仅提供controller
):
= link_to 'Kind1', url_for(controller: :users, action: :index, kind: :students)
它产生相同的路径:
/users/students
使用users_path(kind: :students)
时,您将获得:
/users?kind=students