2016-01-01 5 views
1

Я начал работать над плагином для redmine, который позволит мне связать контакт QuickBook Online (QBO) с проблемой.Redmine Добавление пользовательского поля выбора

Я создал таблицу для контактов, в которой хранится только имя для каждого контакта qbo.

Я также добавил миграции, чтобы добавить ссылку на qbo_contact к вопросам

class UpdateIssues < ActiveRecord::Migration 
    def change 
    add_reference :issues, :qbo_customer, index: true 
    end 
end 

Проблема, которую я имею что когда вопрос редактируется, пользователь может выбрать QBO контакт. Когда пользователь сохраняет проблему, проблема не обновляется.

Я чувствую, что это, возможно, что-то делать с коробкой отбора формы

Пожалуйста посоветуйте

class QboHookListener < Redmine::Hook::ViewListener 

    # Edit Issue Form 
    # Show a dropdown for quickbooks contacts 
    def view_issues_form_details_bottom(context={}) 
    selected = "" 

    # Check to see if there is a quickbooks user attached to the issue 
    if not context[:issue].qbo_customer_id.nil? then 
     selected = QboCustomers.find_by_id(context[:issue].qbo_customer_id).name 
    end 

    # Generate the drop down list of quickbooks contacts 
    select = context[:form].select :qbo_customer_id, QboCustomers.all.pluck(:name, :id), include_blank: true, selected: selected 
    return "<p>#{select}</p>" 

    #TODO save selection to Issues.qbp_customer_id 
    end 
end 

Если вам нужно больше, я разделил свою работу на github

+1

Причина может быть в белом/черном списке атрибутов. Redmine имеет собственную логику ('safe_attributes'), чтобы определить, какие атрибуты могут быть изменены (например,' attr_accessible' в ядре Rails). Посмотрите на [этот код] (https://github.com/redmine/redmine/blob/3.2-stable/app/models/issue.rb#L401-L437) (Redmine 3-2 stable), ядро ​​Redmine определяет допустимые атрибуты Вот. Я полагаю, вы должны добавить свой атрибут ('qbo_customer_id') в этот список. Конечно, вы должны сделать это в своем подключении не в исходной модели 'issue'. – gotva

+0

Это была именно эта проблема. Спасибо! Теперь мне просто нужно выяснить, как добавить safe_attribute в модель через мой плагин ... –

ответ

1

Проблема заключалась в том, что есть белый/черный список атрибутов, разрешенных для проблемы.

Оказывается, это была проблема документально here

Исправлено в r4491. Теперь вы можете расширить безопасные атрибуты для данной модели с помощью:

'Foo' Issue.safe_attributes, 'бар'

или делает безопасным атрибуты условно:

Issue.safe_attributes 'Foo', «бар ',: if => lambda {| issue, user | issue.author == user}

Вы можете посмотреть redmine/safe_attributes.rb.

Я просто добавил в init.rb следующее, чтобы мой плагин добавил qbo_customer_id в список безопасных атрибутов.

# Add qbo_customer to the safe Issue Attributes list 
Issue.safe_attributes 'qbo_customer_id'