【问题标题】:Ruby on Rails - Thredded Gem - Displaying #<User:0x007fd8d5424108> instead of UsernameRuby on Rails - Thredded Gem - 显示 #<User:0x007fd8d5424108> 而不是用户名
【发布时间】:2016-05-18 14:43:34
【问题描述】:

我正在创建一个在 Ruby on Rails 上运行的应用程序,并使用 thredded Gem 作为其社区组件:https://github.com/thredded/thredded

目前,在应用程序的第三部分,它正在显示

#<User:0x007fd8d5424108>

应该在哪里显示用户名。

我在 User 上有一个 :name 列,用于定义他们的用户名。我也在使用 Devise 进行注册。

显示用户名时的链接如下:

现在我知道我可以将 thredded_current_user 更改为 thredded_current_user.name,但这需要找到 thredded gem 中使用它的任何地方,将其复制到我的应用程序,然后更改视图。我想必须有一个更简单的答案,我只是不知道是什么。

除了将 thredded_current_user 的所有实例更改为 thredded_current_user.name 之外,还有其他显示用户名的方法吗?

这是 thredded 初始化程序的代码:

# 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 defau

lt 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

这是我的路线代码:

Rails.application.routes.draw do
  get 'page/home'
  get 'page/feed'
  get 'page/about'
  get 'page/contact'

  mount Thredded::Engine => '/community'

  devise_for :users, :path => '', :path_names => { :sign_in => "login", :sign_out => "logout", :sign_up => "register" }, :controllers  => {
             :registrations => 'users/registrations',  :omniauth_callbacks => "users/omniauth_callbacks" }

  resources :users,  path: "", only: [:show] do
    resources :tracks
  end

  resources :tracks, only: [:create, :destroy]

  resources :feeds, only: [:create, :destroy, :show]
  # The priority is based upon order of creation: first created -> highest priority.
  # See how all your routes lay out with "rake routes".

  # You can have the root of your site routed with "root"
root 'page#home'



  # Example of regular route:
  #   get 'products/:id' => 'catalog#view'

  # Example of named route that can be invoked with purchase_url(id: product.id)
  #   get 'products/:id/purchase' => 'catalog#purchase', as: :purchase

  # Example resource route (maps HTTP verbs to controller actions automatically):
  #   resources :products

  # Example resource route with options:
  #   resources :products do
  #     member do
  #       get 'short'
  #       post 'toggle'
  #     end
  #
  #     collection do
  #       get 'sold'
  #     end
  #   end

  # Example resource route with sub-resources:
  #   resources :products do
  #     resources :comments, :sales
  #     resource :seller
  #   end

  # Example resource route with more complex sub-resources:
  #   resources :products do
  #     resources :comments
  #     resources :sales do
  #       get 'recent', on: :collection
  #     end
  #   end

  # Example resource route with concerns:
  #   concern :toggleable do
  #     post 'toggle'
  #   end
  #   resources :posts, concerns: :toggleable
  #   resources :photos, concerns: :toggleable

  # Example resource route within a namespace:
  #   namespace :admin do
  #     # Directs /admin/products/* to Admin::ProductsController
  #     # (app/controllers/admin/products_controller.rb)
  #     resources :products
  #   end

end

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 devise


    【解决方案1】:

    这实际上与线程 gem 无关;视图在用户对象上调用to_s。如果您将&lt;?= thredded_current_user =&gt; 放在您的视图中,ERB 将自动在thredded_current_user 对象上调用to_s。在link_to 辅助方法中也会发生同样的事情。

    您可以像这样覆盖 User 模型中的to_s 方法:

    class User < ActiveRecord::Base
      def to_s
        name
      end
      ...
    end
    

    或者,您可以将name 方法别名为to_s,如下所示:

    alias_method :to_s, :name
    

    【讨论】:

    • 这很完美!谢谢!我知道必须有一个简单的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    相关资源
    最近更新 更多