【问题标题】:Struggling to get rails 6 API only app to operate the way I want it to努力让 rails 6 API only 应用程序以我想要的方式运行
【发布时间】:2020-01-29 23:42:17
【问题描述】:

这是我的第一个 Rails 应用程序,我正在构建一个仅 API 的应用程序。假设您有一个名为“Data”的模型,它看起来像这样:

class Data < ApplicationRecord
  belongs_to :x, class_name: 'Datum'
  belongs_to :y, class_name: 'Datum'
end

Datum 模型如下所示:

class Datum < ApplicationRecord
  belongs_to :data
end

而“Datum”有一个名为“value”的字符串属性。基本上,当有人点击“数据”控制器创建新数据时,他们将 :x 和 :y 作为字符串传入,但控制器会拦截这些字符串并创建两个新的数据,并将“值”属性设置为 params[:x ] 和一个带有 params[:y] 和 Data.x -> Datum...我已经做了好几个小时了,我无法让 x_id 和 y_id 设置任何我尝试的方式。

【问题讨论】:

  • 嗯,所以 x 和 y,它们实际上是同一个表,也许你可以使用 STI。 guides.rubyonrails.org/…
  • 我建议阅读Active Record Associations 文档并考虑您对那些支持的模式的期望操作。设置好关系后,我建议您在使用类方法设置这些 id 时发布控制台输入/输出示例
  • 而在Data类中,应该是has_one :x has_one :y
  • @FeifeiXiong 是的,我输入后注意到了,谢谢

标签: ruby-on-rails ruby model-view-controller


【解决方案1】:

我认为你应该在 Data 和 datums 之间创建 has_many 关系

数据模型

class Data < ApplicationRecord
  has_many :datums
end

基准模型

class Datum < ApplicationRecord
  belongs_to :data
end

在数据控制器内部(创建方法),您可以创建@data和2个基准记录如下

def create
  @data = Data.new(data_params)
  @datum_x = @data.datums.create(value: params[:x])
  @datum_y = @data.datums.create(value: params[:y])
  ...
end

【讨论】:

    【解决方案2】:

    只需提供foreign_key:

    class Data < ApplicationRecord
      belongs_to :x, class_name: 'Datum'
      belongs_to :y, class_name: 'Datum', foreign_key: 'y_id'
    end
    

    【讨论】:

      猜你喜欢
      • 2017-04-13
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 2014-11-15
      相关资源
      最近更新 更多