使用collection_singular_ids = ids而不保存到数据库

时间:2012-11-17 00:06:21

标签: ruby-on-rails ruby ruby-on-rails-3

在rails中我使用other_ids=[...]方法在has_many :through关联上分配连接。它工作正常,除非我不想将other_ids=[...]提交到数据库(使用此方法自动分配保存)。

有没有办法在使用Model.new时分配这些连接?这有用的一个例子是当我提交一个包含has_many关系复选框的表单时。当表单未保存时(验证失败时),所选复选框将重置。

型号:

class Job < ActiveRecord::Base
  has_many :categories
  attr_accessible :category_ids
end

查看:

select :category_ids, Category.all.collect {|x| [x.name, x.id]}, {}, {:multiple => true}

1 个答案:

答案 0 :(得分:3)

这很奇怪。我的意思是,我理解为什么它会保存,因为它是其他记录的关系,而不是你正在使用它的那个,但我认为应该很容易在AR中实现该功能。

无论如何,您可以执行以下操作来解决此问题。使用虚拟属性

class Bar < ActiveRecord::Base
  after_save :save_foos
  has_many :foos

  attr_accessor :temp_foo_ids # Bad name for it but whatever...
  attr_accessible :temp_foo_ids

  def save_foos
    foo_ids = temp_foo_ids  # it should save the record like this again right?
  end
end

在视图中,您还将使用虚拟属性

select :temp_foo_ids, Foo.all.collect {|x| [x.name, x.id]}, {}, {:multiple => true}

我没有对此进行任何测试,但我相信它会起作用;)