Ruby on Rails – 将引擎的变量和方法扩展到整个应用程序

我正在使用Ruby on Rails作为我的应用程序,我使用Thredded作为社区方面,并使用Devise作为身份validation方面。

虽然我认为这个问题不是特定于任何实际的Gems,而是更常见的Ruby on Rails问题。

要安装Thredded Gem,我将此代码放在我的route.rb文件中:

mount Thredded::Engine => '/community/' 

这使得Thredded gem从/ community /完美运行。

我想在整个网站上使用Thredded导航。

我可以使用链接到Thredded路径,但是我还需要访问Thredded控制器中定义的操作。

例如,在导航的一部分中有一些代码:

   0)].compact, ' ') %>   0 -%>    

所以我需要能够在整个应用程序中使用unread_private_topics_count,但是目前,我只能在/ community / scope中使用它。

这是在Thredded应用程序控制器中定义unread_price_topics_count的地方:

 def unread_private_topics_count @unread_private_topics_count ||= if signed_in? Thredded::PrivateTopic .for_user(thredded_current_user) .unread(thredded_current_user) .count else 0 end end 

有没有办法在/ community / scope之外访问它?

这是Thredded Gem: https : //github.com/thredded/thredded

这是Thredded导航:

  

以下是导航呈现的共享文件: https : //github.com/thredded/thredded/tree/master/app/views/thredded/shared

这是Thredded Initializer文件:

 # frozen_string_literal: true # Thredded configuration # ==> User Configuration # The name of the class your app uses for your users. # By default the engine will use 'User' but if you have another name # for your user class - change it here. Thredded.user_class = 'User' # User name column, used in @mention syntax and should be unique. # This is the column used to search for users' names if/when someone is @ mentioned. Thredded.user_name_column = :name # The path (or URL) you will use to link to your users' profiles. # When linking to a user, Thredded will use this lambda to spit out # the path or url to your user. This lambda is evaluated in the view context. Thredded.user_path = lambda do |user| user_path = :"#{Thredded.user_class.name.underscore}_path" main_app.respond_to?(user_path) ? main_app.send(user_path, user) : "#{user.to_param}" end # This method is used by Thredded controllers and views to fetch the currently signed-in user Thredded.current_user_method = :"current_#{Thredded.user_class.name.underscore}" # User avatar URL. rb-gravatar gem is used by default: Thredded.avatar_url = ->(user) { user.profile_picture.url } # ==> Permissions Configuration # By default, thredded uses a simple permission model, where all the users can post to all message boards, # and admins and moderators are determined by a flag on the users table. # The name of the moderator flag column on the users table. Thredded.moderator_column = :admin # The name of the admin flag column on the users table. Thredded.admin_column = :admin # This model can be customized further by overriding a handful of methods on the User model. # For more information, see app/models/thredded/user_extender.rb. # ==> Email Configuration # Email "From:" field will use the following # Thredded.email_from = 'no-reply@example.com' # Incoming email will be directed to this host # Thredded.email_incoming_host = 'example.com' # Emails going out will prefix the "Subject:" with the following string # Thredded.email_outgoing_prefix = '[My Forum] ' # Reply to field for email notifications # Thredded.email_reply_to = -> postable { "#{postable.hash_id}@#{Thredded.email_incoming_host}" } # ==> View Configuration # Set the layout for rendering the thredded views. Thredded.layout = 'thredded/application' # ==> Error Handling # By default Thredded just renders a flash alert on errors such as Topic not found, or Login required. # Below is an example of overriding the default behavior on LoginRequired: # # Rails.application.config.to_prepare do # Thredded::ApplicationController.module_eval do # rescue_from Thredded::Errors::LoginRequired do |exception| # @message = exception.message # render template: 'sessions/new', status: :forbidden # end # end # end 

被摧毁的路线:

 Routes for Thredded::Engine: theme_preview GET /theme-preview(.:format) thredded/theme_previews#show new_private_topic GET /private-topics/new(.:format) thredded/private_topics#new private_topic GET /private-topics/:id(/page-:page)(.:format) thredded/private_topics#show {:page=>/[1-9]\d*/} private_topic_private_posts POST /private-topics/:private_topic_id(.:format) thredded/posts#create new_private_topic_private_post GET /private-topics/:private_topic_id/new(.:format) thredded/posts#new edit_private_topic_private_post GET /private-topics/:private_topic_id/:id/edit(.:format) thredded/posts#edit private_topic_private_post PATCH /private-topics/:private_topic_id/:id(.:format) thredded/posts#update PUT /private-topics/:private_topic_id/:id(.:format) thredded/posts#update DELETE /private-topics/:private_topic_id/:id(.:format) thredded/posts#destroy private_topics GET /private-topics(.:format) thredded/private_topics#index POST /private-topics(.:format) thredded/private_topics#create edit_private_topic GET /private-topics/:id/edit(.:format) thredded/private_topics#edit PATCH /private-topics/:id(.:format) thredded/private_topics#update PUT /private-topics/:id(.:format) thredded/private_topics#update DELETE /private-topics/:id(.:format) thredded/private_topics#destroy autocomplete_users GET /autocomplete-users(.:format) thredded/autocomplete_users#index messageboards_search GET / thredded/topics#search messageboard_search GET /:messageboard_id(.:format) thredded/topics#search edit_preferences GET /preferences/edit(.:format) thredded/preferences#edit preferences PATCH /preferences(.:format) thredded/preferences#update PUT /preferences(.:format) thredded/preferences#update new_messageboard GET /messageboards/new(.:format) thredded/messageboards#new edit_messageboard_preferences GET /:messageboard_id/preferences/edit(.:format) thredded/preferences#edit messageboard_preferences PATCH /:messageboard_id/preferences(.:format) thredded/preferences#update PUT /:messageboard_id/preferences(.:format) thredded/preferences#update new_messageboard_topic GET /:messageboard_id/topics/new(.:format) thredded/topics#new messageboard_topics GET /:messageboard_id(/page-:page)(.:format) thredded/topics#index {:page=>/[1-9]\d*/} categories_messageboard_topics GET /:messageboard_id/category/:category_id(.:format) thredded/topics#category messageboard_topic GET /:messageboard_id/:id(/page-:page)(.:format) thredded/topics#show {:page=>/[1-9]\d*/} messageboard_topic_posts POST /:messageboard_id/:topic_id(.:format) thredded/posts#create new_messageboard_topic_post GET /:messageboard_id/:topic_id/new(.:format) thredded/posts#new edit_messageboard_topic_post GET /:messageboard_id/:topic_id/:id/edit(.:format) thredded/posts#edit messageboard_topic_post PATCH /:messageboard_id/:topic_id/:id(.:format) thredded/posts#update PUT /:messageboard_id/:topic_id/:id(.:format) thredded/posts#update DELETE /:messageboard_id/:topic_id/:id(.:format) thredded/posts#destroy POST /:messageboard_id(.:format) thredded/topics#create edit_messageboard_topic GET /:messageboard_id/:id/edit(.:format) thredded/topics#edit PATCH /:messageboard_id/:id(.:format) thredded/topics#update PUT /:messageboard_id/:id(.:format) thredded/topics#update DELETE /:messageboard_id/:id(.:format) thredded/topics#destroy messageboards GET / thredded/messageboards#index POST / thredded/messageboards#create root GET / thredded/messageboards#index 

要访问Thredded控制器的视图上下文,请通过Thredded::ApplicationController.renderer呈现部分。

参见Thredded Wiki:在Thredded之外渲染Thredded partials 。