Ruby on rails 3 使所有ActionViewer帮助程序方法在模块中可用
我正在使用RubyonRails3。我有一个名为Ruby on rails 3 使所有ActionViewer帮助程序方法在模块中可用,ruby-on-rails-3,Ruby On Rails 3,我正在使用RubyonRails3。我有一个名为Content的模型。在控制器中,我提取一些变量并将它们传递给查看器。在查看器中,我希望使用我自己制作的函数,这样查看器中就不会有太多的逻辑和代码。我在ContentsHelper模块中定义了这些函数 ContentsHelper模块中定义的My函数正在使用ActionViewer帮助函数,但是这些函数在ContentsHelper模块中不可用。例如,我得到了#错误的NoMethodError:undefined方法内容_标记” 如何使所有Acti
Content
的模型。在控制器中,我提取一些变量并将它们传递给查看器。在查看器中,我希望使用我自己制作的函数,这样查看器中就不会有太多的逻辑和代码。我在ContentsHelper
模块中定义了这些函数
ContentsHelper模块中定义的My函数正在使用ActionViewer帮助函数,但是这些函数在ContentsHelper模块中不可用。例如,我得到了#错误的NoMethodError:undefined方法内容_标记”
如何使所有ActionViewer助手功能可用
新手
Tim的以下建议:
module ContentsHelper
include ActionView::Helpers
def bla
content_tag(:h2, self.title)
end
我可以在控制台中以Content.bla
的形式运行bla方法。这太完美了
但是当我用image\u标签
替换ccontent\u标签
时,我遇到了麻烦,出现了以下错误:
NoMethodError: undefined method `config'
from /Users/sonat/.rvm/gems/ruby-1.8.7-p334/gems/activemodel-3.0.0/lib/active_model/attribute_methods.rb:364:in `method_missing'
from /Users/sonat/.rvm/gems/ruby-1.8.7-p334/gems/activerecord-3.0.0/lib/active_record/attribute_methods.rb:46:in `method_missing'
from /Users/sonat/.rvm/gems/ruby-1.8.7-p334/gems/activerecord-3.0.0/lib/active_record/attribute_methods.rb:44:in `send'
我可以看到负责image_tag方法的模块缺少“某物”。如果你们能告诉我查找缺失内容的一般方法以及解决问题的方法,我将不胜感激。看起来您正在尝试做一些奇怪的事情,比如在模型中使用helper方法,而不是在视图中使用。辅助对象方法用于视图,而不用于模型
补充
Tim问我是否可以提供一些到其他资源的链接,但实际上这是非常基本的东西,我不知道有什么可以处理。大多数教程都处理一些不寻常的事情,比如在视图外部使用帮助程序
因此,这里有一些代码:
app/helpers/contents\u helper.rb
app/views/contents/index.html.erb
列出内容
转到/contents URL时的HTML输出
列出内容
福
这很难做到。内容标签:
这行吗
module ContentsHelper
include ActionView::Helpers
end
图像标签:
看起来您必须通过实现#path_to_image(image)
方法让模型知道图像的位置
我已经为我们设定了一个要点,在这里模拟您需要的功能:
您应该能够下载并运行forNoNameNo.rb(应该安静地运行,不会出现错误)
该文件提供了一些使图像标签工作所需的示例
进一步讨论:
助手可能是Rails中最奇怪的部分。它们是在控制器级别声明的,但只包含在视图级别,并且依赖于控制器堆栈的奇怪部分来获取它们的信息;然而,他们主要关心的信息是模型信息。所以他们散布在所有这些奇怪的问题上
为了处理由此产生的代码组织问题,人们倾向于使用。(另见)
这就是说,如果您希望在rails中偏离常规,那么阅读源代码通常非常有用
如果您使用的是textmate:
mate `gem which actionpack`../action_view
在Terminal.app中,您的应用程序应该可以到达那里。如果您使用的是另一个编辑器/操作系统,您可能必须导航到actionpack告诉您要去的地方。我同意这个奇怪之处。我想我完全糊涂了。不过,据我所知,助手是为观众服务的。这也是我的意图。例如:我正在将@content
变量传递给查看器@content.body
包含一个长文本,出于演示目的,我想根据其他参数(例如,取决于内容)将其缩短。我不想在查看器中计算所有这些内容,因此我需要一个助手来进行所有这些计算并输出html代码。因此,我需要在助手中使用ActionViewer::Helper方法,但不知道如何使用?例如,假设这是我的助手:模块ContentsHelper;def缩短;内容标签(somecode);结束;结束
。我的问题是让content\u tag
在这里可用…@NoNameNo:这是他的意思,顺便说一下:@NoNameNo,你的错误消息在content
-这是模型类。如果您在视图中使用视图帮助器,那么错误将出现在类似#…的地方,只是为了澄清一下-只要您在视图中(即在.erb或.haml文件中)而不是在模型中使用帮助器,您就不需要在帮助器中使用ActionView方法。所有ActionView方法都可用。您的“自制函数”在做什么?查看您正在描述的代码会很有帮助。Rails紧贴一组配置模式。我建议在一开始就坚持这些模式,因为它们已经被证明了。一段时间后,您可以对模式本身进行更改,甚至对模式本身做出贡献。看起来您可能需要确保:controller module level变量可用:您的编辑正在谈论运行Content。控制台中的bla
是相关的。控制台不加载视图上下文,它实际上只用于运行模型方法。有太多的上下文缺失(比如整个请求
上下文),这意味着许多东西(比如路径帮助器)在控制台中无法工作,除非进行大量的黑客攻击(这使得大多数使用控制台测试非模型方法的努力无效)。(cc@natedavisolds)如果我们能看到您试图在助手中使用哪些TagHelpers方法,这将非常有帮助,这样我们就可以建议您是否最好将其拆分为半视图、半模型样式,或者在模型级别生成字符串是否真的是一种好方法。Tim请查看新的编辑。你的建议在一定程度上帮助了我。你让它听起来比实际情况复杂得多。如果你按照他们的意图使用帮助者,他们并不奇怪。您不需要任何特殊的包含,当然也不需要阅读任何源代码
<h1>Listing Contents</h1>
<p>Foo</p>
module ContentsHelper
include ActionView::Helpers
end
mate `gem which actionpack`../action_view