0

Итак, я использую Ruby on Rails для своего приложения, я использую Thredded для аспекта сообщества и разработал для аспект аутентификации.Ruby on Rails: Расширение функциональности двигателя для всего приложения

Хотя я считаю, что этот вопрос не относится ни к одному из реальных драгоценных камней, и более общий вопрос Ruby on Rails.

Для установки Thredded Gem, я ставлю этот код в моем route.rb файле:

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

Это делает Thredded гем работу отлично от/сообщества /.

Я хочу использовать Thredded navigation по всему сайту. Однако я могу получить доступ только к вещам типа Thredded.current_user или другим конкретным переменным Thredded в/community/section сайта.

Есть ли способ монтировать Thredded :: Engine внутри/community /, но также иметь аспекты его доступности за пределами этой области?

Вот Thredded Gem: https://github.com/thredded/thredded

Вот Thredded навигация:

<nav class="thredded--navigation" role="navigation"> 
    <ul class="thredded--user-navigation<%= ' thredded--user-navigation-standalone' if Thredded.standalone_layout? %>"> 
    <% if signed_in? && Thredded.standalone_layout? %> 
     <li class="thredded--user-navigation--profile thredded--user-navigation--item"> 
     <%= link_to thredded_current_user, user_path(thredded_current_user) %> 
     </li> 
    <% end %> 

    <%= render 'thredded/shared/nav/notification_preferences', messageboard: messageboard_or_nil %> 
    <%= render 'thredded/shared/nav/private_topics' %> 

    <% if Thredded.standalone_layout? %> 
     <%= render 'thredded/shared/nav/standalone' %> 
    <% end %> 
    </ul> 
    <div class="thredded--main-navigation"> 
    <%= yield :thredded_breadcrumbs %> 
    <%= render 'thredded/search/form', messageboard: messageboard_or_nil %> 
    </div> 
</nav> 

Вот общие файлы СЧА оказывает: 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 = '[email protected]' 

# 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 

T hredded Маршруты:

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 
+0

«Есть ли способ монтировать Thredded :: Engine внутри/community /, но также иметь его аспекты вне этой области?» - Пожалуйста, опишите конкретно, что вы подразумеваете под «имеющимися аспектами». – Elvn

+0

Итак, в навигации Thredded он вызывает такие вещи, как «thredded_current_user» и «messageboard: messageboard_or_nil», которые доступны только в разделе приложения, где Thredded :: Engine ('/ community /') Я хочу, чтобы иметь возможность использовать эту навигацию по всему приложению, но если я использую ее где-нибудь вне/community/rails, мне говорят, что она не существует. –

+0

Хорошо. Благодарю. Я отправил кое-что для вас, чтобы попробовать. – Elvn

ответ

0

к справочным навигации в двигателе с вашего main app

<%= link_to 'Link text', your_engine_name.path_name_from_the_engines_routes_path, title:"Rails engine" %> 

В вашем примере

<%= link_to thredded_current_user, thredded.user_path(thredded_current_user) %> 

thredded строчные буквы во всех ссылках на двигатель от main app.

Если ваш двигатель установлен и настроен должным образом, это будет работать. Я только упоминаю об этом, потому что я не знаю, что такое ваша конфигурация, а двигатели rails полностью зависят от соглашения.

+0

Пожалуйста, дайте мне знать, как это происходит. – Elvn

+0

Так что это не работает для меня. Это исходящие маршруты: edit_preferences GET/preferences/edit (.: Формат) thredded/Preferences # редактировать Таким образом, чтобы связать с этим, я предполагаю, что я должен использовать: <% = link_to "Thredded Preferences", thredded.edit_preferences%> Но это дает мне ошибку: неопределенный метод 'edit_preferences' для # Также я добавил Thredded маршруты к моей должности –

+0

использования <% = link_to "Thredded Preferences", thredded.edit_preferences_path%> Используйте _path, как требуется помощнику link_to. – Elvn

 Смежные вопросы

  • Нет связанных вопросов^_^