ссылка на функцию контроллера из представления - PullRequest
0 голосов
/ 26 августа 2010

У меня есть функция, чтобы взять на себя ответственность за работу, которая обновляет базу данных для обновления имени пользователя в строке таблицы. Я хочу связать эту функцию из представления, а затем перенаправить на соответствующую страницу.

Как вы связываете функцию контроллера или модель с представлением?

из индекса я хочу иметь еще одну ссылку рядом с show, edit, delete, которая говорит: «бери в руки» Это затем запустит действие в контроллере приложения

def accept_job(job_type, id, username)
    if (job_type == 'decom')
      Decommission.update(id, :username => username)
    else

    end
end

Ответы [ 2 ]

1 голос
/ 26 августа 2010

Вы можете использовать переменную экземпляра @controller, чтобы получить ссылку на контроллер.Что касается вызова функции модели, вы можете вызвать Model.function для вызова методов класса или, если у вас есть конкретный Model экземпляр с именем model_instance, тогда используйте model_instance.function для вызова метода экземпляра.

Редактировать : Хорошо, думаю, я понимаю, о чем вы сейчас спрашиваете.

Вы должны

  1. Создайте новое действие в контроллере, давайтеназовите это update_username:

    def update_username
      job = Job.find(params[:id])
      job.your_method #call your method on the model to update the username
      redirect_to :back #or whatever you'd like it to redirect to
    end
    
  2. Добавьте ваше действие в маршруты.Подробнее см. Маршруты с внешней стороны .

  3. Добавьте ссылку в виде:

    <%=link_to "Update my username please!", update_username_job_path%>
    
0 голосов
/ 26 августа 2010

Сначала вы создаете функцию в вашей модели, скажем,

class Decommission

def assign_permission (name) # ваш код обновления end

end

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

1 - Создать вспомогательный метод для обновления разрешения (Это можно сделать либо в Application helper, либо в помощнике, связанном с вашим представлением)

2 - Создав метод контроллера (как вы предложили) Но если вы не используете этот метод в других представлениях, вам не нужно создавать этот метод в контроллере приложения

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

cheers

sameera

...