【问题标题】:Undefined Method in ruby on railsruby on rails 中的未定义方法
【发布时间】:2013-12-13 15:33:38
【问题描述】:

我是 Ruby on Rails 的新手,我坚持一些如此简单的事情,但我就是想不通。

我搭建了一个视频模型、控制器和视图,然后为主页创建了一个 Welcome 控制器。

我在欢迎视图文件夹中手动创建了一个 index.html.erb 文件,然后继续将主页路由到 Welcome#index。目前一切正常。

事情是当我像这样在 welcome_controller 中定义一个方法

def foo
   puts 'Hello'
end

我在 welcome/index.html 文件中这样称呼它

<%= foo %>

我收到以下错误:未定义的局部变量或方法 `foo' for #

【问题讨论】:

    标签: ruby-on-rails ruby methods undefined


    【解决方案1】:

    控制器操作不是视图助手,您需要将foo 放入application_helper.rbwelcome_helper.rb 中以像您一样使用它并将其更改为删除puts,像这样:

    def foo
      'Hello'
    end
    

    这会将Hello 插入到您的视图中(我认为这是您所期望的)

    根据您下面的 cmets,您可能应该在模型中使用 scope...

    scope :highlighted -> { (where(highlight: true) }
    

    ...从您的控制器返回突出显示的记录...

    @highlighted = Videos.highlighted
    

    ...然后在您的视图中遍历@highlighted...

    <% @highlighted.each do |video| %>
    <%= ...do something with video here... %>
    <% end %>
    

    请在此处阅读有关这一切的更多信息:

    http://guides.rubyonrails.org/index.html

    特别是这里的范围......

    http://guides.rubyonrails.org/active_record_querying.html

    【讨论】:

    • 我想要做的是调用这个方法module WelcomeHelper def search_highlight @highlighted = Videos.where(highlight: true) puts @highlighted end end 但现在我得到一个未初始化的常量错误。我尝试只输出“hello”,未定义的方法错误消失了,但“hello”没有在屏幕上输出。
    • 不要使用puts...您希望该方法返回一个字符串(或另一个对象),而不是将其发送到STDOUT。
    【解决方案2】:

    您不能在控制器中调用任意“事物”。

    控制器中公开的是它的实例变量,例如,@foo

    如果您真的想要调用使用puts 的方法,请将其放入帮助程序中,例如welcome_helper.rb(或任何约定)。

    但是请注意,这不会像您认为的那样,即在网页上放置一个“Hello”。您基本上是直接写入控制台,甚至不是日志文件。

    你具体想完成什么?

    【讨论】:

    • 我试图做的是调用这个方法module WelcomeHelper def search_highlight @highlighted = Videos.where(highlight: true) puts @highlighted end end 但现在我得到一个未初始化的常量错误。我尝试只输出“hello”,未定义的方法错误消失了,但“hello”没有在屏幕上输出。
    • @user3099920 因为puts 与渲染 HTML 无关,正如我已经说过的。助手用于返回 HTML 字符串。您将遍历视频并返回集合的 HTML 字符串。我不会,我会使用部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 2016-02-17
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 2016-12-15
    相关资源
    最近更新 更多