Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.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动态注入关联?_Ruby On Rails - Fatal编程技术网

Ruby on rails 有没有办法为rails动态注入关联?

Ruby on rails 有没有办法为rails动态注入关联?,ruby-on-rails,Ruby On Rails,比如说我有一个嘉宾模特 当我在某些操作上使用来宾模型时,我想注入这个关联(仅在该操作上) 属于:类别 我如何做到这一点?听起来您可能想在代码方面变得更聪明一些。虽然这是可能的,但它不是一个本机特性,可能会引入很多黑客元编程,因此可能会引入一些讨厌的bug。我建议你退一步,看看你是否能重新思考你试图解决的问题。您正在使用RESTful控制器吗?根据你的问题很难说,但当你开始问这样的问题时,答案通常是否定的。你的控制器是否有太多的逻辑?也许你正在尝试做的一些事情可以转移到模型上。如果你提供更多关于你

比如说我有一个嘉宾模特

当我在某些操作上使用来宾模型时,我想注入这个关联(仅在该操作上)

属于:类别


我如何做到这一点?

听起来您可能想在代码方面变得更聪明一些。虽然这是可能的,但它不是一个本机特性,可能会引入很多黑客元编程,因此可能会引入一些讨厌的bug。我建议你退一步,看看你是否能重新思考你试图解决的问题。您正在使用RESTful控制器吗?根据你的问题很难说,但当你开始问这样的问题时,答案通常是否定的。你的控制器是否有太多的逻辑?也许你正在尝试做的一些事情可以转移到模型上。如果你提供更多关于你正在做什么的信息,你可能会得到更多有用的回答。

理论上可能是可能的,但在你的情况下,这是无法实现的。
因为
属于\u to
是一个数据库问题,这意味着一个数据库表的id指向另一个表。ActiveRecord只是包装了所有这些功能,然后看起来就像是在与Ruby对象交互。因此,您不能临时更改数据库,然后以合理的价格动态更改。

虽然我同意@Beerlington的观点,您可能试图变得太聪明,但以下是答案:

  • 这样制作一个模块:

    module Categorical
        def self.included(included_class)
          included_class.instance_eval do
              # from here to the end of this block, imagine that you are in the class
              # source itself. Add associations or instance methods, for example
    
              belongs_to :category
          end
        end
    end
    
  • 现在,将该模块包括在课堂中:

    class Guest < ActiveRecord::Base
        include Categorical
        ....
    
    end
    
    classguest
  • 就在这里


    如果您还将命名的作用域添加到分类类或其他帮助器方法中,这可能很有用…

    为什么不在模型中正确定义它呢?除了使代码难以维护外,动态执行还有什么好处?要使该关联起作用,您需要来宾表中的一个键来引用该类别,因此它还是相对静态的。您可能可以使用
    class\u eval
    使其工作,但这是难以置信的脏,只会在以后绊倒您。只需在模型中设置它,并仅在需要时使用它。为什么要这样做?让它只在一个操作中设置和查看可能是有意义的,但关联需要在模型中保持一致。请详细解释您试图实现的目标,以及您认为它应该是动态的原因。嘿,大家好-感谢您的帮助。它适用于一些已经弃用的遗留代码。我需要它提供的数据,这就是为什么我只需要它的一部分——在迁移脚本中。是的,我确实在努力变得聪明。我不想将它放在模型中,我只需要将它放在代码的一部分中,放在迁移脚本中。谢谢,我还没有尝试过它,但看起来这正是我需要的!