如何添加用户名才能发表评论?

用户创建评论时。 我们怎么能加上他的名字呢? 我尝试过current_user,但显然只是声明当前用户的名字而不是发表评论的人的姓名。

在用户模型has_many :comments, as: :commentable注释模型中的belongs_to :commentable, polymorphic: true在路由中使用resources :users do resources :comments end细分resources :users do resources :comments end

观点/评论/ _comments.html.erb

 

评论控制器

 class CommentsController < ApplicationController before_action :load_commentable before_action :set_comment, only: [:show, :edit, :update, :destroy] before_action :logged_in_user, only: [:create, :destroy] def index @comments = @commentable.comments end def new @comment = @commentable.comments.new end def create @comment = @commentable.comments.new(comment_params) if @comment.save @comment.create_activity :create, owner: current_user redirect_to @commentable, notice: "comment created." else render :new end end def edit @comment = current_user.comments.find(params[:id]) end def update @comment = current_user.comments.find(params[:id]) if @comment.update_attributes(comment_params) redirect_to @commentable, notice: "Comment was updated." else render :edit end end def destroy @comment = current_user.comments.find(params[:id]) @comment.destroy @comment.create_activity :destroy, owner: current_user redirect_to @commentable, notice: "comment destroyed." end private def set_comment @comment = Comment.find(params[:id]) end def load_commentable resource, id = request.path.split('/')[1, 2] @commentable = resource.singularize.classify.constantize.find(id) end def comment_params params.require(:comment).permit(:content, :commentable) end end 

我通过创建控制器在活动源工作中显示了各种名称。 我是否有原则可以让它成功,因为我已经尝试过并且失败了。

 class ActivitiesController < ApplicationController def index @activities = PublicActivity::Activity.order("created_at desc").where(owner_id: current_user.following_ids, owner_type: "User") end end 

用户迁移

 class CreateUsers < ActiveRecord::Migration def change create_table :users do |t| t.string :name t.string :email t.string :provider t.string :uid t.string :oauth_token t.datetime :oauth_expires_at t.timestamps null: false end end end 

评论迁移

 class CreateComments < ActiveRecord::Migration def change create_table :comments do |t| t.text :content t.belongs_to :commentable, polymorphic: true t.timestamps null: false end add_index :comments, [:commentable_id, :commentable_type] end end 

valuations_controller

 class ValuationsController < ApplicationController before_action :set_valuation, only: [:show, :edit, :update, :destroy] before_action :logged_in_user, only: [:create, :destroy] def index if params[:tag] @valuations = Valuation.tagged_with(params[:tag]) else @valuations = Valuation.order('RANDOM()') end end def show @valuation = Valuation.find(params[:id]) @commentable = @valuation @comments = @commentable.comments @comment = Comment.new end def new @valuation = current_user.valuations.build @commentable = @valuation @comments = @commentable.comments @comment = Comment.new end def edit end def create @valuation = current_user.valuations.build(valuation_params) if @valuation.save redirect_to @valuation, notice: 'Value was successfully created' else @feed_items = [] render 'pages/home' end end def update if @valuation.update(valuation_params) redirect_to @valuation, notice: 'Value was successfully updated' else render action: 'edit' end end def destroy @valuation.destroy redirect_to valuations_url end private def set_valuation @valuation = Valuation.find(params[:id]) end def correct_user @valuation = current_user.valuations.find_by(id: params[:id]) redirect_to valuations_path, notice: "Not authorized to edit this valuation" if @valuation.nil? end def valuation_params params.require(:valuation).permit(:name, :private_submit, :tag_list, :content, :commentable, :comment) end end 

感谢您的时间!

假设你有

用户模型:

 class User has_many :comments ... end 

评论模型

 class Comment belongs_to :user ... end 

评论迁移

 class CreateComments < ActiveRecord::Migration def change create_table :comments do |t| t.text :content t.belongs_to :user, index: true t.timestamps null: false end end end 

您可以通过获取用户的评论名称

 @comment = Comment.find(params[:id]) @comment.user.name 

编辑:如果你想使用多态关联,编辑你的模型如下

 class User has_many :comments, as: :commentable ... end class Comment belongs_to :commentable, polymorphic: true ... end 

编辑:插入评论迁移

 class CreateComments < ActiveRecord::Migration def change create_table :comments do |t| t.text :content t.references :commentable, polymorphic: true, index: true t.timestamps null: false end end end 

与ValuationsController相关的编辑

  1. 您正在寻找创建特定评估评论的用户。 @valuation持有此评论。 因此,您可以通过@valuation.commentable.user.name获取用户 - 这假设您的Valuation设置了与Comment模型的正确关联。

  2. 删除@commentable = @valuation@comments = @commentable.comments 。 它们没有错,但在这种情况下,保持具有相同值的变量没有任何意义。

  3. 在'show'动作中,您已经使用Comment.new指定了@comment。 删除此行,因为您没有在show动作中创建新对象。

  4. 您已经在类顶部的before_action中使用相同的值分配了@valutation。 为防止混淆,请在show动作中删除此附加作业。

未来调试的线索:如果您的代码无法正常工作,请尝试在rails控制台中运行。 我们昨天看到, @comment.commentable.user.name周围的代码是正确的。 这告诉我,你的控制器肯定有问题。

最终解决方案

<%= User.find(comment.user_id).name %>到_comments.html.erb