Rails:视图中找不到辅助函数

4

我正在按照以下指示进行操作:http://agilewebdevelopment.com/plugins/acts_as_taggable_on_steroids,以在我的视图中添加标签云:

在控制器中:

class PostController < ApplicationController
   def tag_cloud
      @tags = Post.tag_counts
   end
end

我还将tag_cloud方法添加为控制器中的助手方法

以及在视图中:

<% tag_cloud @tags, %w(css1 css2 css3 css4) do |tag, css_class| %>                   (line 1)
  <%= link_to tag.name, { :action => :tag, :id => tag.name }, :class => css_class %> (line2)
<% end %> (line 3)

然而:

1)如果我在控制器中没有添加 helper_method :tag_cloud,那么对于 tag_cloud 我会得到一个 undefined method 错误。

2)但是,如果我添加了 helper 方法,那么在我上面示例代码的同一行会出现 wrong number of arguments (2 for 0) 错误。

建议?

解决办法 最终我没有按照视图中的示例代码来做。

而是这样做:

<% @post.tags.each do |tag| %>
    <%= link_to( tag.name,tag,:class => "tag_cloud_item_link") %>
<% end %>
3个回答

2

1.

控制器中定义的方法在视图中不可访问,除非您添加(正如您提到的)helper_method调用。

2.

您在控制器中定义的辅助方法tag_cloud没有带任何参数,但您尝试使用@tags%w(css1...)和一个块来调用tag_cloud

您的tag_cloud方法将仅返回一个@tags实例变量。

从您提供的帖子中,您是否在ApplicationHelperinclude TagsHelper?我猜这将定义一个tag_cloud辅助方法,可以接受您正在尝试传递的参数。


一切都“正常工作”吗?这似乎是某种冲突或插件未正确加载。自从您安装插件以来,您是否重新启动了应用程序(我知道这听起来很傻)?您能否粘贴完整的错误信息? - theIV
重新加载和其他功能都正常工作。我通过使用@tags = tag_cloud的解决方法,然后使用@tags.each。稍后我会发布更多的代码和错误信息,谢谢。 - cbrulak

1

我遇到了同样的问题。就像OP一样,将“tag_cloud”辅助方法移动到TagHelper中似乎消除了一些问题,但在此过程中创建了“参数数量错误”的错误。

cbrulak说他找到了一个解决方法。你能否更新我们,并可能向“Acts-as-taggable-on”作者发送PM,链接为https://github.com/mbleigh/acts-as-taggable-on


1

我来到这里是因为我想定义一个在视图中使用的方法。简单的答案是,它应该在模型中定义(例如conversation.rb文件),而不是在帮助程序中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接