Rails 4 - 在嵌套资源中添加现有关联

时间:2014-11-23 03:45:01

标签: ruby-on-rails-4 model-associations

我有3个型号:

class Resource < ActiveRecord::Base
  has_many :blocks
  has_many :topics, :through => :blocks, dependent: :destroy

class Topic < ActiveRecord::Base
  has_many :blocks
  has_many :resources, :through => :blocks, :class_name => 'Resource', dependent: :destroy
  accepts_nested_attributes_for :resources
  accepts_nested_attributes_for :blocks, :allow_destroy => true

class Block < ActiveRecord::Base
  belongs_to :resource
  belongs_to :topic
  accepts_nested_attributes_for :resource, :allow_destroy => true, :reject_if => :all_blank

我的路线:

namespace :admin do
  resources :topics do
    resources :resources do
      post :link
      delete :unlink

一切正常,除了我想在“添加资源”中选择现有资源(在下拉列表中)以及创建新资源(工作正常)。

所以,我想要一个显示所有资源的下拉菜单,然后将我选择的那个添加到Block模型中。换句话说,我只需要创建主题和资源之间的关联(通过块模型)。

当我有一个多选项时,我能够做到这一点,但是我正在敲打我的头只能用一个资源(在已经选择的那个上添加它)。

我清楚了吗? :/

谢谢! - 文森特

1 个答案:

答案 0 :(得分:0)

如果你有这样复杂的逻辑,最好使用一些东西 像"Form Objects"一样保存多个模型和关系 他们。即将保存逻辑移到两个模型之外。

access_nested_attributes_for应该只用于非常简单 案例(像大多数Rails的神奇功能一样)