我刚刚开始使用rails,我知道它一定是简单的我做错了,但对于我的生活我无法理解。
我正在尝试在我的控制器中为一个名为“缩短”的“帖子”定义一个简单的方法,该方法将返回我传递给它的任何字符串的缩短版本。在我的posts_controller.rb中,我提出以下内容;
def shorten(theString, length = 50)
if theString.length >= length
shortened = theString[0, length]
else
theString
end
end
尝试从我的视图中调用它会给我一个未定义的方法错误。我在帖子的一个实例中调用它,所以我假设我不需要self.shorten。我继续尝试将自我预先添加到方法定义中,但它仍然无效。
答案 0 :(得分:4)
默认情况下,控制器中定义的方法仅适用于您的控制器,而不适用于您的视图。
处理此问题的首选方法是将您的方法移至app/helpers/posts_helper.rb
文件,然后在您的视图中正常工作。
如果您需要能够在控制器和视图中访问该方法,您可以将其保留在控制器中并添加helper_method
行:
helper_method :shorten
def shorten(theString, length = 50)
if theString.length >= length
shortened = theString[0, length]
else
theString
end
end
最后,如果您希望能够将其直接应用于模型,请将其放在app/models/posts.rb
文件中(不带helper_method
行)。但是,我假设你不想传递一个字符串,而只想使用你的一个字段:
def shorten(length = 50)
if description.length >= length
description[0, length]
else
description
end
end
然后你可以这样称呼它:
<%= post.shorten %>
但是,Rails已经有一个truncate方法构建,您可以使用:
<%= truncate("My really long string", :length => 50) %>