【问题标题】:nested form in Activeadmin with dropdown selection - Ruby on RailsActiveadmin 中的嵌套表单,带有下拉选择 - Ruby on Rails
【发布时间】:2017-11-13 11:11:01
【问题描述】:

我有下一个数据库设计:

一个order可以有一个size,一个size可以有很多orders

例如:

订单 1 的 size 属性等于 medium

Order 2 的 size 属性等于 medium

我希望在活动管理员中创建订单时能够选择尺寸。

订购型号:

class Order < ApplicationRecord
  has_one :order_size
  accepts_nested_attributes_for :order_size, :allow_destroy => true
end

订货尺寸型号:

class OrderSize < ApplicationRecord
  belongs_to :orders
end

另外,OrderSize 表必须有一个 order_id 列吗?

我不知道模型是否正确,但 activeadmin 给了我这个错误:

undefined method `order_id' for #<Order:0x007fb980e34b80>

我的 activeadmin 模型

订单大小:

ActiveAdmin.register OrderSize do
  permit_params :name
end

订单:

ActiveAdmin.register Order do
  permit_params :due_date, :comments, :approved, :order_size_id,
                order_size_attributes: [:id, :name,:_destroy]

  form do |f|
    f.inputs "Admin Details" do
      f.input :due_date
      f.input :order_size
      f.input :comments
      f.input :approved
    end
    f.actions
  end

end

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-5 activeadmin


    【解决方案1】:

    我不知道模型是否正确,但 activeadmin 给了我 这个错误:

    Order:0x007fb980e34b80 的未定义方法 `order_id'

    是的,Rails 期望 ObjectRelationalMapping(ORM) 有一个 foreign_key(order_id)关联模型(订单)RDBMS 进行通信。为 order_id 创建迁移并运行 rake db:migrate 以解决问题。

    belongs_tohas_one关联名称也应该是单数

    class OrderSize < ApplicationRecord
      belongs_to :order
    end
    

    此外,orders 中不应包含 order_size_id,因为关联是 has_one :order_size。相反,正如我在上面指出的那样,您应该在 order_sizes 中有 order_id

    【讨论】:

    • 但是我可以在不同的订单中拥有相同的订单尺寸(例如中号)吗?
    • @exsnake 恐怕你应该改变你的关联来满足这一点!
    • @pavin 嗯,你能帮我吗?我假设一个订单只能有一个尺寸,一个尺寸可以是许多订单的一部分。我用 belongs_to 错了吗?
    • @exsnake 我之前的评论可能有误!似乎您的关联是正确的,可以实现您想要的。
    猜你喜欢
    • 1970-01-01
    • 2021-10-16
    • 2014-08-04
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    相关资源
    最近更新 更多