使用 Rails gem "acts-as-taggable-on" 导航
Navigation with Rails gem "acts-as-taggable-on"
我想制作带有特定标签的导航。
这些标签例如:HTML、CSS 和 Javascript.
所以当我点击其中一个时,它会显示所有带有这些标签的帖子。
我怎样才能做到这一点?
我的导航代码现在看起来像这样(它在 Application.html.erb 中)
<%= link_to "Computer", tag_list.Computer %>
我得到这个错误:
undefined local variable or method `tag_list' for #<#:0x007feec764ff88>
我自己得到的。
这是代码:
<%= link_to 'Computer', { :controller => 'posts', :action => 'index', :tag => 'Computer'} %>
控制器看起来像这样:
def index
if params[:tag]
@posts = Post.tagged_with(params[:tag]).order('created_at DESC')
else
@posts = Post.all.order('created_at DESC')
end
end
tag_list
是一个局部变量或方法,因此除非您是在助手中创建它的,否则这是您的第一个问题。第二个是在它上面调用 .Computer
不起作用,因为 tag_list 是由 gem 创建的一种方法,用于列出所有对象标签,并调用 .
(也称为链接)正在尝试调用一个名为 Computer 的方法,该方法不存在,它应该只是一个字符串并且必须用引号引起来。
因此,在您的布局视图中,您可以执行
= link_to "Computer", tagged_posts_url(tag: "Computer")
然后在您的 posts_controller.rb
中添加一个名为 tagged
的操作
def tagged
if params[:tag].present?
@posts = Post.tagged_with(params[:tag])
else
@posts = Post.all
end
end
要维护一组 DRY 视图,您甚至可以告诉它呈现索引视图,因为您很可能已经有了一个帖子列表,现在它看起来完全一样,但只包含带有该标签的帖子。例如
def tagged
if params[:tag].present?
@posts = Post.tagged_with(params[:tag])
else
@posts = Post.all
end
render "index"
end
然后在您的 config/routes.rb
现有 post
路由下为您的新控制器操作添加路由
resources :posts do
collection do
get "/posts/tagged", as: :tagged
end
我想制作带有特定标签的导航。
这些标签例如:HTML、CSS 和 Javascript.
所以当我点击其中一个时,它会显示所有带有这些标签的帖子。
我怎样才能做到这一点?
我的导航代码现在看起来像这样(它在 Application.html.erb 中)
<%= link_to "Computer", tag_list.Computer %>
我得到这个错误:
undefined local variable or method `tag_list' for #<#:0x007feec764ff88>
我自己得到的。 这是代码:
<%= link_to 'Computer', { :controller => 'posts', :action => 'index', :tag => 'Computer'} %>
控制器看起来像这样:
def index
if params[:tag]
@posts = Post.tagged_with(params[:tag]).order('created_at DESC')
else
@posts = Post.all.order('created_at DESC')
end
end
tag_list
是一个局部变量或方法,因此除非您是在助手中创建它的,否则这是您的第一个问题。第二个是在它上面调用 .Computer
不起作用,因为 tag_list 是由 gem 创建的一种方法,用于列出所有对象标签,并调用 .
(也称为链接)正在尝试调用一个名为 Computer 的方法,该方法不存在,它应该只是一个字符串并且必须用引号引起来。
因此,在您的布局视图中,您可以执行
= link_to "Computer", tagged_posts_url(tag: "Computer")
然后在您的 posts_controller.rb
中添加一个名为 tagged
def tagged
if params[:tag].present?
@posts = Post.tagged_with(params[:tag])
else
@posts = Post.all
end
end
要维护一组 DRY 视图,您甚至可以告诉它呈现索引视图,因为您很可能已经有了一个帖子列表,现在它看起来完全一样,但只包含带有该标签的帖子。例如
def tagged
if params[:tag].present?
@posts = Post.tagged_with(params[:tag])
else
@posts = Post.all
end
render "index"
end
然后在您的 config/routes.rb
现有 post
路由下为您的新控制器操作添加路由
resources :posts do
collection do
get "/posts/tagged", as: :tagged
end