simple rails helper给出“NoMethodError”

时间:2013-08-30 12:19:04

标签: ruby-on-rails helpers

助手/ subcategories_helper.rb:

module SubcategoriesHelper
  def has_topic_headings?
    self.topic_headings
  end
end

categories / show.html.erb包含

          <% @category.subcategories.each do |subcategory| %>
            <li>
              <h6>
                <%if subcategory.has_topic_headings? %>
                  <%= link_to subcategory.name, subcategory, data: :has_topic_headings %>
                <% else %>
                  <%= link_to subcategory.name, subcategory %>
                <% end %>  
              </h6>
              <hr>
            </li>
          <% end %>

页面返回

undefined method `has_topic_headings?' for #<Subcategory:0xa68748c>

请注意,视图页面属于类别,而不属于子类别。

2 个答案:

答案 0 :(得分:1)

您正试图在模型上调用它,这就是为什么在包含帮助程序时不会调用它的原因。帮助者在那里观看,有时候是控制者。

答案 1 :(得分:0)

这是你的方法:

<%= link_to subcategory.name, subcategory, data: :has_topic_headings %>

编辑:对不起误解。错误发生在您在链接中传递的数据中:

data: :has_topic_headings

rails要求使用上述方法,而不是has_topic_headings?

编辑:是的,正如@techvineet所说,你不能在子类别对象上调用辅助方法。 你应该在子类别模型中编写方法:

 def has_topic_headings?
    return true if self.topic_headings
 end

或者您可以在助手类中执行此操作:

def has_topic_headings(subcategory)
   return true if subcategory.topic_headings
end

并以您的形式,将其称为:

<%if has_topic_headings(subcategory) %>
  <%= link_to subcategory.name, subcategory, data: :has_topic_headings %>
<% else %>
  <%= link_to subcategory.name, subcategory %>
<% end %>  

希望它会有所帮助。谢谢