首页 > 解决方案 > 如何使用参数的值为关联模型构建“.collection”方法?

问题描述

我不确定我的问题的正确术语是什么,但是是否可以使用参数的值来“构建”其适当的.collection方法?

例如,提交有_许多图像、标签和文档。根据用户与之交互的内容,我想创建适当的关联。

最初,我只为标签设置了它......

def add_to_submission(task, user, tag)
  sub = Submission.find_or_create_by(task: task, user: user)
  sub.tags << tag
end

但是有没有办法可以进一步概括它,以便第三个论点可以更加动态?因此,不仅可以接受标签,还可以像这样使用它

add_to_submission(@task, @current_user, @new_image)

类似于...的东西

def add_to_submission(task, user, associated_item)
  sub = Submission.find_or_create_by(task: task, user: user)
  items = associated_item.pluralize
  sub.items << associated_item
end

标签: ruby-on-railsrubyassociations

解决方案


对于方法的动态调用,.send可以使用。您可以传递方法名称的符号。你应该能够做这样的事情,但我会确保对你的方法进行良好的单元测试。

def add_to_submission(task, user, associated_item)
  submission = Submission.find_or_create_by(task: task, user: user)
  children = associated_item.pluralize.to_sym
  submission.send(children) << associated_item
end

推荐阅读