0

下面是我的模型。用语言来形容它,“节目”有“船员”。“船员”由“人”组成。“Crew”中“Show”和“People”之间的关联可以是“Actor”或“Other”类型。我有来自“显示”表单上的自动完成 UI 的令牌,其中“人物”填写在“演员”字段或“其他”字段中。

问题:在“显示”模型的actor_tokens=(ids)actor_tokens=(ids)方法中,我保存进入的令牌,如何将关系保存为“演员”或“其他”?

从中保存的所有关联actor_tokens=(ids)都应为“演员”类型,并且从中保存的所有关联other_tokens=(ids)都应为“其他”类型,并且

我正在寻找一个优雅的解决方案来匹配使用 *collection_singular_ids=ids* 来保存我的令牌。

船员模型

class Crew < ActiveRecord::Base
  belongs_to :show
  belongs_to :person

  attr_accessor  :type    #this can be 'actor'  'other' string

end

人物模型

class Person < ActiveRecord::Base
          attr_accessible :first_name, :handle, :last_name
          has_many :crews
          has_many :shows, :through => :crews

        end

显示模型

 class Show < ActiveRecord::Base
      attr_accessible :handle, :name, :crew_tokens
      has_many :crews
      has_many :people, :through => :crews

      attr_reader :actor_tokens

      def actor_tokens=(ids)
        self.person_ids = ids.split(",")
            #----->associate tokens coming in here as type = 'actor'
      end

      def other_tokens=(ids)
        self.person_ids = ids.split(",")
            #----->associate tokens coming in here as type = 'other'
      end

    end 

PS:请为这篇文章建议一个更好的标题!

谢谢!

4

1 回答 1

1

你不能用你想要的方式collection_singular_ids=创建新实例。只接受有效的、已经存在的 id 列表;您不能通过此方法指定其他属性。Crewids_writer

相反,您可以构建Crew实例,根据需要指定:person_idand:type并将它们关联回Show.

def actor_tokens(ids)
  create_crews_from_ids(ids, :actor)
end

def other_tokens=(ids)
  create_crews_from_ids(ids, :other)
end

  private

  def create_crews_from_ids(ids, type)
    ids = ids.split(",").each do |id|
      crews.create({ person_id: id, type: type })
    end
  end
于 2012-08-30T01:16:50.233 回答