Rails中的NoMethodError用于Helpers / Controller / Model中定义的方法

时间:2013-04-04 18:53:17

标签: ruby-on-rails ruby ruby-on-rails-3 nomethoderror

(前言:我学习Rails已经10个月了,所以这可能是一个真正的新手错误。)

我的应用VenuesVenueCategories相关联。在我的Venue视图中,当用户将Venue共享到Twitter时,我希望将一些哈希标记填充到共享内容中。为此,我创建了一个方法(尽管可能不是一个理想的实现,稍后会重构)hash_tags将在VenueCategory上调用。首先我把它放在 VenueCategoriesHelper.rb 中,并在控制台中调用它时得到NoM​​ethodError进行测试。我将方法移动到模型和控制器只是为了测试它,但产生了相同的结果。

我尝试使用和不传递venue_category作为参数来定义方法。

我做错了什么?相关代码如下。

VenueCategoriesHelper.rb

def hash_tags(venue_category)
  hash_tags = []
  hash_tag_string = ""
  if venue_category.name == "Restaurant"
    hash_tags << "#restaurants"
  elsif venue_category.name == "Salons & Spas"
    hash_tags << ["#salons", "#spas"]
  elsif venue_category.name == "Hotels & Resorts"
    hash_tags << ["#hotels", "#resorts"]
  elsif venue_category.name == "Bars & Nightlife"
    hash_tags << ["#bars", "#nightlife"]
  end
  hash_tags.each do |h|
    hash_tag_string << "#{h} "
  end
end

show.html.slim(添加了随机代码段以进行测试

...
p = resource.venue_category.hash_tags(resource.venue_category)

#header-module
  #overall-score-container
    #overall-score-header
...

来自控制台和在浏览器中运行时出错

NoMethodError: undefined method `hash_tags' for #<VenueCategory:0x007ff2134b69c0>

提前感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:2)

Helper模块包含在视图渲染器的范围内,而不是模型中。将视图代码更改为:

p = hash_tags(resource.venue_category)