Ruby on Rails中未定义的局部变量/无方法错误

时间:2014-05-01 20:13:14

标签: ruby-on-rails ruby

任何人都可以向我解释为什么我收到此错误? Rails是关于约定的。有没有更传统的方式来做我在下面尝试做的事情?

undefined local variable or method `hello_world' for #<#<Class:...>:...>

以下是我的文件:

welcome_controller.rb

class WelcomeController < ApplicationController
  def hello_world
    "Hello, World"
  end
end

欢迎/ index.html.erb

<%= hello_world %>

的routes.rb

Rails.application.routes.draw do
  get 'welcome/index'
  root 'welcome#index'
end

5 个答案:

答案 0 :(得分:6)

或者做:

class WelcomeController < ApplicationController
 helper_method :hello_world
 def hello_world
    "Hello, World"
 end
end

现在在视图中调用它:

<%= hello_world %>

阅读helper_method

  

将控制器方法声明为帮助程序,以使hello_world控制器方法可用于视图。

答案 1 :(得分:4)

您可以使用helper在ERB中写下该内容:

module WelcomeHelper

  def hello_world
     "Hello, World"
  end

end

现在,您的ERB应该有效:

<%= hello_world %>

答案 2 :(得分:2)

hello_world是在控制器和路由中定义的操作 您需要在操作中定义变量。可以在视图中访问此变量

class WelcomeController < ApplicationController

 # this is action
 def index
    # this is variable
    @hello_world = "Hello, World"
 end

end

# view index.html.erb
# this calls variables defined in action
<%= @hello_world %>

<强> UPDATE1:

如果您定义到welcome#index的路线,控制器中的操作名称应为index

答案 3 :(得分:0)

这是更多Rails惯例:

#config/routes.rb
root to: "welcome#index"
resources :welcome

#app/controllers/welcome_controller.rb
Class WelcomeController < ApplicationController
    def index
       #-> will render #app/views/welcome/index.html.erb
    end
end

#app/views/welcome/index.html.erb
Hello World
<%= hello_world %> <!-- Use `@Arup`'s answer to create a helper method -->

答案 4 :(得分:0)

您可以使用print&#39; ff&#39;。它只是为我工作:)