2013-07-16 6 views
2

Мне нужно решить конкретную проблему для Redmine, но я новичок в Ruby и Ruby on Rails в частности.Redmine User project priority plugin

так что мне нужно.

У меня есть разработчики в Redmine. Для каждого разработчика (= пользователь) мне нужно показать (на странице Домашняя страница и MyPage) приоритеты проектов для этого пользователя, определенные кем-то. Например:

Jhon: 
--- 
1. Project1 
2. Project2 
... 
Mary: 
--- 
1. Project2 
2. Project23 
3. Project1 
... 
The solution i see is the following (assuming plugin is called UserProjectPrios).

Модель. Создание таблицы user_project_prios:

  • user_id (FK: пользователь)
  • project_id (Ф.К.: проект)
  • ПРИО (интермедиат)

Создание модели (может выглядеть бесполезным, только начиная с RnR :)

class UserProjectPrio < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :project 
    attr_reader :project, :prio 

    def initialize (project_id, prio) 
    @project = Project.find(project_id) 
    @prio = prio 
    end 

    def self.get_user_projects(user_id) 
    user_project_prios = [] 
    self.find_by_user_id(user_id).each do |up| 
     user_project_prios.push(self.new(up.project_id, up.prio, up.enum_issueprio_position)) 
    end 

    user_project_prios 
    end 
end 

Контроллер. Я знаю, что для домашней страницы я могу использовать крючки. например

class Hooks < Redmine::Hook::ViewListener 
    def view_welcome_index_left (context = {}) 
    context[:user_name] = User.current.name; 
    context[:user_project_prios] = UserProjectPrio.get_user_projects(???user_id???); 

    context[:controller].send(:render_to_string, { 
     :partial => "hooks/user_project_prios/user_project_prios", 
     :locals => context 
    }) 
    end 
end 

Теперь проблема здесь user_id. Пользователь класса в Redmine, похоже, не раскрывает его идентификатор для публики. Итак, как мне найти UserProjectPrios? Для вашего пользователя?

Или я действительно ошибаюсь ...?

+0

Ну, я был не прав в этом идентификаторе пользователя IS. Просто User.current.id. Но главный вопрос остается: есть ли лучшее решение? –

ответ

0

Yeah, поэтому простой способ:

class Hooks < Redmine::Hook::ViewListener 
    def view_welcome_index_left (context = {}) 
    user_project_prios = UserProjectPrio.all(:conditions => { :user_id => User.current.id }, :order => "prio ASC"); 

    context[:user_name] = User.current.name; 
    context[:user_project_prios] = user_project_prios 

    context[:controller].send(:render_to_string, { 
     :partial => "hooks/user_project_prios/user_project_prios", 
     :locals => context 
    }) 
    end 
end 

И модель

class UserProjectPrio < ActiveRecord::Base 
    belongs_to :project 
end 

А потом, просто перебираем user_project_prios в шаблоне и принести проект как

<ul> 
    <% user_project_prios.each do |upp| %> 
    <li><%= upp.project.name %></li> 
    <% end %> 
</ul> 

Но теперь у меня проблемы с таблицей. Я использую следующий код создания:

class CreateUserProjectPrios < ActiveRecord::Migration 
    def self.up 
    create_table :user_project_prios do |t| 
     t.references :user 
     t.references :project 
     t.string :prio 
     t.string :enum_issueprio_position 
    end 

    change_table :user_project_prios do |t| 
     t.index ([:user_id, :project_id, :prio, :enum_issueprio_position], :name => 'unique_key', :unique => true) 
    end 
    end 

    def self.down 
    drop_table :user_project_prios 
    end 
end 

и результирующих полей user_id, PROJECT_ID не внешние ключи не будут созданы. Я что-то пропустил?

+0

У меня такая же проблема – eri

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

  • Нет связанных вопросов^_^