加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails 4 API – 接受命名空间模型的嵌套属性

发布时间:2020-12-16 19:08:42 所属栏目:百科 来源:网络整理
导读:我有这样的事情: module Api module V1 class Order ActiveRecord::Base has_many :order_lines accepts_nested_attributes_for :order_lines endendmodule Api module V1 class OrderLine ActiveRecord::Base belongs_to :order endend 在我的订单控制器中
我有这样的事情:
module Api
  module V1
    class Order < ActiveRecord::Base

    has_many :order_lines
    accepts_nested_attributes_for :order_lines
  end
end

module Api
  module V1
    class OrderLine < ActiveRecord::Base

    belongs_to :order
  end
end

在我的订单控制器中,我允许order_lines_attributes参数:

params.permit(:name,:order_lines_attributes => [
                      :quantity,:price,:notes,:priority,:product_id,:option_id
            ])

然后,我正在调用相应的路线,这将创建一个订单和所有嵌套的order_lines.该方法成功创建了一个订单,但是一些rails魔术也试图创建嵌套的order_lines.我收到此错误:

未初始化的Constant OrderLine.

我需要我的accepts_nested_attributes_for调用才能意识到OrderLine被命名为Api :: V1 :: OrderLine.相反,幕后的rails只是在没有命名空间的情况下寻找OrderLine.我该如何解决这个问题?

解决方法

我很确定这里的解决方案只是让Rails知道完整的嵌套/命名空间类名.

来自docs:

:class_name

Specify the class name of the association. Use it only
if that name can’t be inferred from the association name. So
belongs_to :author will by default be linked to the Author class,but
if the real class name is Person,you’ll have to specify it with this
option.

我经常看到,class_name选项将字符串(类名)作为参数,但我更喜欢使用常量,而不是字符串:

module Api
  module V1
    class Order < ActiveRecord::Base
      has_many :order_lines,class_name: Api::V1::OrderLine
    end
  end
end

module Api
  module V1
    class OrderLine < ActiveRecord::Base
      belongs_to :order,class_name: Api::V1::Order
    end
  end
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读