Неопределенная локальная переменная или метод, когда представление вызывает метод - PullRequest
0 голосов
/ 09 июня 2011

Я пытаюсь дать приветственное сообщение своим пользователям:

 #welcome_controller.rb
    class WelcomeController < ApplicationController
      def hi
        @current_user
        if (@current_user)
          @welr = '¡Bienvenido' + current_user + ' a nuestra web!' 
        else
          @weli = "¡Bienvenido invitado, no dude en registrarse!"
        end
      end
    end
 #hi.html.erb Only the call
    <%= hi %>

Когда я инициализирую свой сервер, контроллер выдает мне следующее сообщение:

неопределенная локальная переменная или метод `hi 'для

Я пробовал много способов исправить это, но не могу.

Ответы [ 3 ]

2 голосов
/ 09 июня 2011

Вы должны определить hi как helper_method в вашем контроллере.Что-то вроде

class WelcomeController < ApplicationController
  helper_method :hi

  def hi
    # your stuff here...
  end

end

См. http://apidock.com/rails/AbstractController/Helpers/ClassMethods/helper_method для получения дополнительной информации

2 голосов
/ 09 июня 2011

Это не то, как вы используете методы контроллера. В Rails методы, определенные на контроллере, используются для «установки» данных, необходимых для конкретного представления, или для обработки заданного запроса. Они не должны вызываться напрямую из представления.

Для того, что вы пытаетесь сделать, вам нужно добавить вспомогательный метод к WelcomeHelper. Итак, если вы хотите, чтобы http://yourapp.dev/welcome/ выдало сообщение выше, вам понадобится:

# app/controllers/welcome_controller.rb
class WelcomeController < ApplicationController
  def index
    # Explicitly defining the `index` method is somewhat redundant, given
    # that you appear to have no other logic for this view. However, I have
    # included it for the sake of example.
  end
end    

# app/views/welcome/index.html.erb
<%= greeting %>

# app/helpers/welcome_helper.rb
class WelcomeHelper
  # All methods in WelcomeHelper will be made available to any views
  # that are part of WelcomeController.
  def welcome
    if (@current_user)
      # You may need to change this to something like `@current_user.name`,
      # depending on what @current_user actually is.
      '¡Bienvenido' + @current_user + ' a nuestra web!' 
    else
      "¡Bienvenido invitado, no dude en registrarse!"
    end
  end
end
1 голос
/ 09 июня 2011

Эта статья может вам помочь:
Ruby on Rails: доступ к методам контроллера из вашего представления

Просто напишите:

<% @controller.hi %>
...