0

我遇到了以下问题:我有很多表,其中一些是嵌套的,而另一些则不是。我将我的应用程序划分为我认为正确的一些领域。一个区域应该同时操作一些表,在同一个动作中,就像我说的:一些模型是嵌套的,而另一些则不是。Rails 世界中最好的解决方案是什么?我应该读什么才能明白这一点?

我试着用

   accepts_nested_attributes_for

我尝试构建对象以与 fields_for 以相同的形式使用。但这将是一个复杂的形式,因为某些对象包含外键,不幸的是我无法获得超过 2 个对象的正确构建。

我会继续努力的。

谢谢!

- - 编辑 - - -

    Class Country < ActiveRecord::Base
      has_many :states
      attr_accessible :nome
      # i tried # accepts_nested_attributes_for :state
    end

    Class State < ActiveRecord::Base
      belongs_to :country
      has_many :cities
      attr_accessible :nome, :country_id
      # i tried # accepts_nested_attributes_for :city
      # i tried # accepts_nested_attributes_for :country # too
    end

模型继续,直到我们得到地址模型:

    Class Adress < ActiveRecord::Base

      has_many :bairros_logradouros # we name streets, avenues, parks as logradouros
                                    # here in Brasil, the others models are translated
                                    # to EN here
      has_many :logradouros, :trough => :bairros_logradouros # many-to-many

      attr_accessible :number, :complement, :other, :another 

      # i tried # accepts_nested_attributes_for :logradouro
    end

设置:国家 -> 州 -> 城市 -> 区(bairro,这里) -> :Logradouro <-> 地址。我试图在两个方向上构建链,但我只得到 2 个对象,第三个给构建方法带来了 nil 问题。

这些表是关于地址的,我应该操纵用户模型 tha has_one Person,最后有一个地址,我想将地址指向 Person 内部的 :addres_id。

所有这些都必须在自定义数据控制器上进行操作,这里的所有 CRUD。

我无法构建整个链条:

    @addres = @addres.new
    @other = @addres.logradouros.build
    @another = @other.build_district
    @even_more = @another.build_city
    ....

我学会了使用 objects.build 和 build_object,但我不能构建超过 2 个嵌套对象。

我是新手。

再次感谢!

4

2 回答 2

0

如果您在 Rails 3.1+(直到但不包括 Rails 4)中使用批量分配白名单,那么如果您使用,则accepts_nested_attributes_for :logradouros需要拥有attr_accessible :logradouros_attributes(注意名称中的复数 logradouros 和 _attributes)。但是,您可能会遇到更多问题。是一个相关的问题。

开始时的一个很好的参考是阅读Rails 指南中的所有内容。

于 2013-02-22T20:27:28.143 回答
0

这是一个很好的起点:

http://www.tutorialspoint.com/ruby-on-rails/index.htm

于 2013-02-22T16:59:28.690 回答