4

在 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}
4

1 回答 1

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

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

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

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

于 2012-11-17T00:36:25.920 回答