Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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 Rails如何在参数中封装2var?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Rails如何在参数中封装2var?

Ruby on rails Rails如何在参数中封装2var?,ruby-on-rails,ruby,Ruby On Rails,Ruby,这似乎是一个无关紧要的问题,但在设置了一个简单的standart rails方法之后,我想将多个参数传递给一个参数,如下所示: def create @comment = @commentable.comments.new(comment_params) @comment.user = current_user Notification.create!(action: "posted", actor: current_user, recipient: (

这似乎是一个无关紧要的问题,但在设置了一个简单的standart rails方法之后,我想将多个参数传递给一个参数,如下所示:

 def create
    @comment = @commentable.comments.new(comment_params)

    @comment.user = current_user

    Notification.create!(action: "posted", actor: current_user,
      recipient: ([@post.user, @comment.user]), notifiable: @comment)


    if @comment.save

      render json: "Commented successfully", status: 201
    else
      render json: @comment.errors, status: :unprocessable_entity
    end
  end

如果收件人刚刚收到@post.user是可以的,但我想知道是否可以传递@comment.user或此类语句中的任何其他变量如果您有适当的
类型关系,那么您可以这样做:

Notification.create!(action: "posted", actor: current_user,
  recipients: [ @post.user, @comment.user ], notifiable: @comment)
)
你只要把它们传进来。如果通知和用户之间没有多对多关联,则需要创建多个记录:

[ @post.user, @comment.user ].each do |user|
  Notification.create!(action: "posted", actor: current_user,
    recipient: user, notifiable: @comment)
  )
end

首选第一种方法,但需要用户和通知之间有一个适当的联接表。

如果您有一个适当的
类型关系,则可以执行以下操作:

Notification.create!(action: "posted", actor: current_user,
  recipients: [ @post.user, @comment.user ], notifiable: @comment)
)
你只要把它们传进来。如果通知和用户之间没有多对多关联,则需要创建多个记录:

[ @post.user, @comment.user ].each do |user|
  Notification.create!(action: "posted", actor: current_user,
    recipient: user, notifiable: @comment)
  )
end

首选第一种方法,但需要在用户和通知之间建立一个适当的联接表。

当一个方法需要一个参数时,Ruby不在乎是否传递一个用户实例或一个数组。但是,当您希望能够传递单个实例或数组时,该方法必须能够同时处理这两个问题。因此,在您的示例中,这是否可能取决于接收器。什么是
Notification.create?这个方法看起来怎么样?@spickermann,谢谢你的关注。但还是有点困惑。接收者只属于:接收者,类名称:通知模型上的“用户”,我理解。我不知道,
通知
是一个普通的ActiveRecord模型,其
属于:收件人
。答案是,只有当您将整个关联从
所属对象更改为:收件人
所属对象和所属对象更改为多个:收件人
时,这才有效。这也需要改变数据库结构。我建议阅读:将数组传递给参数是一种非常有效的方法,不需要括号<代码>收件人:[a,b]
工作正常。斯皮克曼收件人是通知的属性,因此通知是多态模型@tadman谢谢我试图传递一个数组,但在日志中显示了一个missMach ActiveRecord::AssociationTypeMismatch(User(#47328244232180)当一个方法需要一个参数时,Ruby不在乎你是传递一个用户实例还是一个数组。但是当你想要传递一个实例或一个数组时,这个方法必须能够同时处理这两个问题。因此,在你的例子中,这个问题的答案取决于接收者。什么是
Notification.create?该方法看起来如何?@spickermann,谢谢你的关注。但还是有点困惑。接收者只是属于:接收者,类名:'User',在通知模型上我理解。我不知道
通知
是一个普通的ActiveRecord模型,带有
属于:接收者
。答案是只有当您将整个关联从
归属于:收件人
更改为
has_和\u归属于\u many:recipients
时,这才有效。这也需要更改数据库结构。我建议阅读:将数组传递给参数是一种非常有效的方法,不需要周围环境括号。
recipient:[a,b]
效果很好。Spickerman收件人是通知的属性,因此通知是多态模型。@tadman谢谢,我尝试传递数组,但在日志中显示missMach ActiveRecord::AssociationTypeMismatch(User(#47328244232180)预计,gotTadman,谢谢!好的,封装的istead我可以作为arraysTadman传递实例,谢谢!好的,封装的istead我可以作为数组传递实例