2

我需要为 Redmine 解决一个特定问题,但我是 Ruby 和 Ruby on Rails 的新手。

所以我需要什么。

我在 Redmine 中有一些开发人员。对于每个开发人员(=用户),我需要显示(在主页和 MyPage 上)某人指定的该用户的项目优先级。例如:

Jhon:
---
1. Project1
2. Project2
...
Mary:
---
1. Project2
2. Project23
3. Project1
...
我看到的解决方案如下(假设插件被调用UserProjectPrios)。

模型。创建一个表user_project_prios

  • user_id (fk: 用户)
  • project_id (fk: 项目)
  • 普里奥 (int)

创建一个模型(可能看起来很垃圾,只是从 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 中的 Class User 似乎没有公开它的 id。那么我如何找到UserProjectPrios当前用户的?

还是我真的走错路了...?

4

1 回答 1

0

是的,所以简单的方法是:

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 没有创建外键。我错过了什么吗?

于 2013-07-16T14:01:02.327 回答