Вызов методов из других контроллеров в рельсах - PullRequest
0 голосов
/ 20 февраля 2011

Я пытаюсь вызвать метод из другого контроллера и получаю сообщение об ошибке метода.

Итак, у меня есть два контроллера Jobs и Admin, я пытаюсь позвонить:

<% @jobs.each do |job| %>

Я помещаю эту команду в представление административного контроллера в фактическом файле контроллера для администратора.У меня есть:

  # GET /jobs
  # GET /jobs.xml
  # GET /admin
  def index
    @jobs = Job.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @jobs }
    end

Что я думал, что потянет все, что мне нужно, но я все еще получаю nomethoderror, так как мне включить контроллер заданий в администраторский?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2011

Вы не определили действие jobs в административном контроллере.Вы загружаете @jobs в действии index контроллера Admin.Если вы хотите эту работу, переименуйте действие index контроллера Admin в задания и добавьте этот маршрут.Один из способов добавить маршрут - добавить строку в config/routes.rb.

match '/jobs' => 'admin#jobs'

Прочитать this .

0 голосов
/ 20 февраля 2011

из кода, который вы разместили, кажется, что вы не используете запрос для получения заданий, которые вы хотите из базы данных, например,

@jobs = Job.all

Job.all - это запрос activerecord, который получает вседоступные записи из базы данных.Похоже, вы можете быть смущены тем, как все части MVC предназначены для совместной работы.

Во-первых, вы не должны делиться методами между контроллерами, в действительности ваши контроллеры будут иметь очень мало кода.

Rails направит запрос и найдет действие, определенное в контроллере, если он его не найдет, он перейдет в папку представлений и получит там шаблон этого имени действия, например, запросto Jobs#index будет искать индексное действие в контроллере, а затем, если его там нет, искать шаблон views/jobs/index.erb для рендеринга.Так что, если вы обслуживаете статические данные и вам не нужно искать данные, вам даже не нужно никаких действий в вашем контроллере.Однако часто это действие необходимо, поскольку именно в контроллере вы выполняете поиск по базе данных и модели, а затем передаете эти переменные экземпляра в представление.Держите все запросы к базе данных и действия модели вне представлений.

def index
  @jobs = Job.all
end

и в представлении

@jobs.each do |job| ...

Блок respond_to совершенно не нужен, если вы не хотите возвращать в другом форматешаблон, чем HTML, например, XML или JSON для веб-службы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...