我想使用特定标签进行导航 这些标签例如是:HTML,CSS和Javascript 因此,当我点击其中一个时,它会显示所有带有这些标签的帖子 我怎样才能做到这一点?
我现在的导航代码看起来像这样(它在Application.html.erb中)
<%= link_to "Computer", tag_list.Computer %>
我收到此错误:
#&lt;#:0x007feec764ff88&gt;
的未定义局部变量或方法`tag_list'
答案 0 :(得分:0)
我自己得到了它。 这是代码:
<%= 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
答案 1 :(得分:0)
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视图,您甚至可以告诉它渲染索引视图,因为您很可能已经有一个帖子列表,现在它看起来完全相同但只包含带有该标记的帖子。 e.g。
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