Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在评论中添加用户名?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 如何在评论中添加用户名?

Ruby on rails 如何在评论中添加用户名?,ruby-on-rails,ruby,Ruby On Rails,Ruby,当用户创建注释时。我们怎么能加上他的名字呢?我尝试了current_用户,但很明显,这只是当前用户的名字,而不是发表评论的人的名字 在用户模型中有许多:注释,如::commentable在注释模型中属于:commentable,多态性:true,在路由中被分解为资源:用户做资源:注释结束 views/comments/_comments.html.erb <div id="comments"> <% @comments.each do |comment| %> &

当用户创建注释时。我们怎么能加上他的名字呢?我尝试了current_用户,但很明显,这只是当前用户的名字,而不是发表评论的人的名字

在用户模型中
有许多:注释,如::commentable
在注释模型中
属于:commentable,多态性:true
,在路由中被分解为
资源:用户做资源:注释结束

views/comments/_comments.html.erb

<div id="comments">
<% @comments.each do |comment| %>
    <div class="comment">
        <%= current_user.name %>
        <%= simple_format comment.content %>
    </div>
<% end %>

评论控制器
class CommentsController
假设您

用户模型: 注释模型 注释迁移 编辑:如果要处理多态关联,请按如下方式编辑模型:

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
class CreateComments
编辑与估价控制器相关的内容

  • 您正在寻找创建特定估价注释的用户@估值持有这一观点。因此,您可以使用
    @valuation.commentable.user.name
    获取用户-这假设您的估价设置了与评论模型的正确关联

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

  • 在“显示”操作中,您已使用comment.new辅助gend@comment。删除此行,因为您没有在“显示”操作中创建新对象

  • 您已经在班上最前面的before_操作中为@Valuation指定了相同的值。为避免混淆,请在“显示”操作中删除此附加分配

  • 未来调试的一个线索:如果您的代码没有按预期工作,请尝试在rails控制台中运行它。我们昨天看到,
    @comment.commentable.user.name
    周围的代码是正确的。这告诉我,你的控制器一定出了问题

    最终解决方案
    添加到_comments.html.erb

    在用户发表评论之前,您如何验证其使用。您需要收集他的详细信息或通过第三方API进行身份验证,并获取我已有的信息
    def set_comment@comment=comment.find(params[:id])end
    。如果我在视图中使用
    @comment.user.name
    ,我会得到一个错误:
    未定义的方法user for#
    。谢谢你!您的用户和评论迁移情况如何?请尝试使用
    owner
    而不是
    user
    。对不起,我不是指代码,而是指VALUATIONS的值。嗯,在控制台上你会得到你想要的结果。您希望在何处检索创建用户名?在表演中?请更新与整个相关控制器的职位。让我们。
    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