Escribí un complemento que capta los últimos problemas y los muestra en la página de inicio. Todo parece funcionar bastante bien, pero solo funciona la primera vez que reinicio el servidor para ejecutarlo, después de eso 'almacena en caché' los problemas de ese momento, y no se recuperan los nuevos.Redmine plugin view hook refresh cuando los problemas cambian
He estado leyendo un poco al respecto, y parece que debería escribir un parche para los problemas para agregar funcionalidad adicional en mi complemento. ¿Es eso cierto? Si es así, ¿qué debo agregar a la acción after_save
? Lo mismo ocurre con el modelo LatestPostsSetup: si cambio los valores para el recuento máximo y el lado en el que debe mostrarse, la página principal no lo refleja hasta que reinicie el servidor.
Disculpa si estas preguntas parecen bastante triviales, soy nuevo en ruby. Por favor, encontrar el código de ayudante de vista a continuación:
module LatestPosts
class ViewHookListener < Redmine::Hook::ViewListener
require 'plugins/latest_posts/app/models/latest_posts_setup.rb'
setup = LatestPostsSetup.find_by_id(1)
if setup == nil
count = LatestPostsSetup::DEFAULT_COUNT
side = LatestPostsSetup::DEFAULT_SIDE
else
count = setup.max_count
side = setup.side
end
issues = Issue.find(:all, :limit => count, :order => "created_on DESC")
if side == 'left'
render_side = :view_welcome_index_left
else
render_side = :view_welcome_index_right
end
render_on render_side, :locals => {:issues => issues}, :partial => "latest_issues/issues"
end end
EDITAR
Ahora he cambiado el ayudante de vista para hacer que el html sobre la marcha, y no tenga que reiniciar Apache para las nuevas emisiones para que se muestre, no entiendo por qué funcionaría con el uso de una plantilla html? A continuación el código:
# lib/latest_posts_hook_listener.rb
module LatestPosts
class ViewHookListener < Redmine::Hook::ViewListener
def view_welcome_index_left(context={})
setup = load_setup()
if setup[:side] == "left"
load_issues(setup[:count])
end
end
def view_welcome_index_right(context={})
setup = load_setup()
if setup[:side] == "right"
load_issues(setup[:count])
end
end
def load_setup()
require 'plugins/latest_posts/app/models/latest_posts_setup.rb'
setup = LatestPostsSetup.find_by_id(1)
if setup == nil
count = LatestPostsSetup::DEFAULT_COUNT
side = LatestPostsSetup::DEFAULT_SIDE
else
count = setup.max_count
side = setup.side
end
{:count => count, :side => side}
end
def load_issues(count)
html = '<div class="box" id="statuses">'
html += '<h3 class="icon22 icon22-users">Latest Issues</h3><ul>'
issues = Issue.find(:all, :limit => count, :order => "created_on DESC")
issues.each do |issue|
html += <<EOHTML
<li>
#{link_to h(truncate(issue.subject, :length => 60)), :controller => 'issues', :action => 'show', :id => issue } (#{ format_date(issue.created_on) })
</li>
EOHTML
end
html += '</ul></div>'
return html
end
end
end
darle las gracias por la respuesta, pero esto no parece que sea. Cambié 'render_on: view_welcome_index_right,: locals => {: issues => issues},: partial =>" latest_issues/issues "' y el resultado fue el mismo. el recuento de problemas que deseo mostrar no se vio afectado por los cambios en la base de datos. –