2010-08-26 2 views
0

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

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

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

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

    end 
end 
+1

Что вы имеете в виду, вы хотите «ссылку на функцию»? Вы говорите о создании гиперссылки на действие конкретного контроллера?Или вы говорите о вызове определенной функции на контроллере или модели? –

ответ

1

Вы можете использовать экземпляр переменную @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. Добавить свое действие маршруты в routes.rb. См. Rails Routing from the Outside In для получения более подробной информации.

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

    <%=link_to "Update my username please!", update_username_job_path%> 
    
+0

Итак, можно ли добавлять в контроллеры множество пользовательских действий? – Rumpleteaser

+0

Что делать, если действие находится в контроллере приложения? – Rumpleteaser

+0

Если по «пользовательским действиям» вы имеете в виду «вещи, отличные от действий REST по умолчанию, созданных строительными лесами», тогда ... определенно да. Контроллеры предназначены для того, чтобы ваша модель и представление связывались друг с другом, что, очевидно, должно произойти здесь. Скорее всего, вы должны поместить его в JobController, а не в ApplicationController. – unsorted

0

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

класс вывода из эксплуатации

Защиту assign_permission (имя) # ваш код обновления конец

конца

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

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

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

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

ура

Sameera

Смежные вопросы