Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html “使用Rails gem导航”;充当“上的标记”;_Html_Ruby On Rails - Fatal编程技术网

Html “使用Rails gem导航”;充当“上的标记”;

Html “使用Rails gem导航”;充当“上的标记”;,html,ruby-on-rails,Html,Ruby On Rails,我想使用特定的标签进行导航。 这些标记例如:HTML、CSS和Javascript。 因此,当我单击其中一个时,它将显示带有这些标签的所有帖子。 我怎样才能做到这一点 我现在的导航代码如下所示(在Application.html.erb中) 我得到这个错误: 未定义的局部变量或方法“tag_list”# 我自己买的。 代码如下: <%= link_to 'Computer', { :controller => 'posts', :action => 'index', :ta

我想使用特定的标签进行导航。
这些标记例如:HTML、CSS和Javascript。
因此,当我单击其中一个时,它将显示带有这些标签的所有帖子。
我怎样才能做到这一点

我现在的导航代码如下所示(在Application.html.erb中)


我得到这个错误:

未定义的局部变量或方法“tag_list”#

我自己买的。 代码如下:

<%= link_to 'Computer', { :controller => 'posts', :action => 'index', :tag => 'Computer'} %>

tag\u list
是一个局部变量或方法,因此除非您在助手中创建了它,否则这是您的第一个问题。第二个是,在它上面调用
.Computer
不起作用,因为tag_list是gem创建的一个方法,用于列出所有对象标记,而调用
(也称为链接)是试图调用一个名为Computer的方法,该方法不存在,它应该只是一个字符串,字符串必须被引用

因此,在布局视图中,您可以

= link_to "Computer", tagged_posts_url(tag: "Computer")
然后在
posts\u controller.rb
中添加一个名为
taged

def tagged
  if params[:tag].present? 
    @posts = Post.tagged_with(params[:tag])
  else 
    @posts = Post.all
  end  
end
为了维护一组干燥的视图,您甚至可以告诉它呈现索引视图,因为您很可能已经有一个帖子列表,现在它看起来完全一样,但只包含带有该标记的帖子。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

谢谢你的回答!我自己已经解决了这个问题,但下次我会尝试你的答案:)不过我会给你正确的答案:)
def tagged
  if params[:tag].present? 
    @posts = Post.tagged_with(params[:tag])
  else 
    @posts = Post.all
  end  
  render "index"
end
resources :posts do
  collection do
    get "/posts/tagged", as: :tagged
  end