【问题标题】:RAILS: Nil class for belongs_toRAILS:belongs_to 的 Nil 类
【发布时间】:2015-12-15 22:08:28
【问题描述】:

我想制作嵌套表格。我有:

advert.rb

has_many :photos
belongs_to :car

accepts_nested_attributes_for :photos
accepts_nested_attributes_for :car

controller.rb

def new
    @advert = Advert.new
    @advert.photos.new # OK
    @advert.car.new    # ERROR
end

所以对于@advert.photos.new,一切正常(生成advert[photos_attributes][o][image]),但对于@advert.car.new,我收到错误:undefined method 'new' for nil:NilClass

UPD 1: 在阅读了大量有关nested_attributes 的文章后,我了解到我们不能将accepts_nested_attributes_for 用于子代(belongs_to)模型中的父代。

那么,实现我的目标的最佳方法是什么?根据我在这个问题中提供的示例制作复杂的表格?

【问题讨论】:

    标签: ruby-on-rails associations nested-forms nested-attributes belongs-to


    【解决方案1】:

    使用

    @advert.car = Car.new
    

    相反。这就是您在 Rails 中建立关联的方式。

    更新

    至于为父母使用嵌套,您可以这样做我意识到可能有更好的方法来完成此操作

    在控制器中,有这样的东西:

    def create
      @advert = Advert.new(advert_params)
      @advert.car = Car.new(car_params)
    
      if @advert.save && @advert.car.save
      ...
      end
    end
    
    private
    
      def advert_params
        params.require(:advert).permit(...whitelisted stuff...)
      end
    
      def car_params
        params.require(:car).permit(...whitelisted stuff...)
      end
    

    【讨论】:

    • 为 nil 类取消定义方法 build
    • 也看看我的UPD 1
    • 对于单数关联应该是build_car。见api.rubyonrails.org/classes/ActiveRecord/Associations/…
    • 对不起,应该已经注意到了。看我的更新。或者按照@ihaztehcodez 说的做。两者都有效。
    • @ihaztehcodez 已经尝试过了,它显示在表单上,​​但只有没有accepts_nested_attributes_for :car。可能是因为我在 UPD 1 中描述的内容。
    猜你喜欢
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    相关资源
    最近更新 更多