在视图中找不到辅助函数

时间:2010-05-22 21:46:15

标签: ruby-on-rails

我按照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,则undefined method会出现tag_cloud错误

2)如果我在上面的示例代码的第1行添加了帮助方法:wrong number of arguments (2 for 0)

建议?

我最终没有在视图中执行我的示例代码。

相反,我这样做了:

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

3 个答案:

答案 0 :(得分:2)

1

除非您添加(如您所述)helper_method电话,否则视图无法访问控制器中定义的方法。

2

您在控制器中定义为帮助程序的方法tag_cloud不会使用任何参数,但您尝试使用tag_cloud @tags来调用%w(css1...) },&amp;一个街区。

您的tag_cloud方法将返回@tags实例变量,就是这样。

从您提供的帖子中,您已经include TagsHelper中的ApplicationHelper了吗?我猜这定义了一个tag_cloud辅助方法,它将接受你试图传入的参数。

答案 1 :(得分:1)

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

克布拉克说他找到了一份工作。您能否更新我们并可能将PM发送给https://github.com/mbleigh/acts-as-taggable-on

上的“Acts-as-taggable-on”作者

答案 2 :(得分:0)

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