Redmine - Ruby - Поиск значения пользовательского поля

Я проверил IRC для redmine и не смог получить помощь. У меня был конфликт с погодой, чтобы закрепить это на Superuser, ServerFault или здесь, но, поскольку моя проблема связана с техническим программированием, я решил обратиться за помощью сюда.

У нас есть система репозиториев Mercurial с макетом, основанным на проектах, отвечающих нашим потребностям. Я написал несколько сценариев оболочки, которые прекрасно работают для управления репозиторием, размещения их в нужных местах и ​​т. д. Я пытаюсь вызвать эти сценарии и передать им параметры из Redmine. Я редактирую app/controllers/projects_controller.rb (строки 75 -> 87)

Мне удалось получить параметры проекта и текущего пользователя, но у меня есть два настраиваемых поля, которые я добавил (используя настраиваемые поля в администрировании Redmine), и я пытаюсь получить доступ к значениям этих настраиваемых полей. Кто-нибудь знает, как я могу получить их?

Мой текущий рабочий тестовый оператор приведен ниже:

 system "echo '#{@project.identifier}, #{User.current}' >> /tmp/rm.log"

person Joshua Enfield    schedule 09.07.2010    source источник


Ответы (2)


Используйте модель CustomField. Например,

  # Find the first Custom Field
  cf = CustomField.first
  # Get the name
  puts cf.name
  # Find out if this Custom Field is for all projects
  cf.is_for_all?
  # If not, find out which projects are using it
  cf.projects

Чтобы понять это, я только что установил Redmine-1.0.0 и порылся в исходниках и скрипте/консоли.

person Mark Thomas    schedule 19.07.2010
comment
Мне удалось разобраться. Я считаю, что вышеизложенное работает, но в итоге я просто получил доступ к базе данных Redmine MySQL из скрипта Perl, чтобы получить данные, используя идентификатор, чтобы найти идентификатор проекта, а затем найти настраиваемое поле через внутреннее соединение. Я отправлю код завтра утром для kriss, так как он вложился в этот вопрос. - person Joshua Enfield; 19.07.2010

use DBI;

$dbServer='';
$user='';
$pass='';
$ident=$ARGV[0];

my $dsn = "dbi:mysql:database=redmine;host=$dbServer;port=3306";
my $dbh = DBI->connect($dsn, "$user","$pass") or die "Can't connet to the Database: $DBI::errstr\n";
my $sth = $dbh->prepare("SELECT value FROM custom_values c INNER JOIN projects p ON c.customized_id=p.id WHERE p.identifier='$ident' LIMIT 1");
$sth -> execute();
my @row=$sth->fetchrow_array();
my $serverParams=@row[0];

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

person Joshua Enfield    schedule 19.07.2010
comment
Спасибо. Мне еще есть с чем разобраться, но это дает мне начало. - person kriss; 23.07.2010