Ruby on rails Rails如何在参数中封装2var?
这似乎是一个无关紧要的问题,但在设置了一个简单的standart rails方法之后,我想将多个参数传递给一个参数,如下所示: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: (
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我可以作为数组传递实例