【问题标题】:Rails and has_many through association - how to properly set the form?Rails 和 has_many 通过关联 - 如何正确设置表单?
【发布时间】:2013-03-23 14:49:05
【问题描述】:

我不确定我的模型设置是否正确,所以我想向您展示我的想法:

我有属于Company 的模型Car。然后我有一个名为Color 的模型。在这个 DB 表中存储了所有颜色(红色、蓝色、...)。然后是第 4 个模型,称为CarColor。此模型包含两列 - job_idcolor_id

在视图中,我希望允许访问者使用复选框来挑选颜色。

表格部分

= form_for @car do |f|
  .field
    = f.label :name
    = f.text_field :name
  .field
    = f.label :location
    = f.text_field :location
  .field
    = fields_for @car_colors do |cc|
      ...
  .field
    = fields_for @company do |c|
      .field
        = c.label :name
        = c.text_field :name

  .actions
    = f.submit 'Save'

型号

class Company < ActiveRecord::Base
  has_many :cars
end
class Car < ActiveRecord::Base
  belongs_to :company

  has_many :car_colors
  has_many :c_colors, :through => :car_colors
end
class Color < ActiveRecord::Base 
  has_many :car_colors
  has_many :cars, :through => :car_colors
end
class CarColor < ActiveRecord::Base
  belongs_to :car
  belongs_to :color
end

保存Cars + Company 效果很好,但我不知道如何在视图中添加带有颜色的复选框。

编辑: 关于评论中的线程,我取得了进展。但是,我发现了一个我不知道如何解决的错误。

我正在使用上面显示的模型结构,这就是视图的样子:

- Color.order('name').each do |clr|
  = check_box_tag :c_color_ids, clr.id, @car.car_colors.include?(clr), :name => 'car[c_color_ids][]'
  = label_tag :c_color_ids, clr.name

这是我得到的错误:

PG::Error: ERROR:  relation "car_colors" does not exist

我错过了什么?关系怎么不存在?

【问题讨论】:

标签: ruby-on-rails ruby associations rails-activerecord


【解决方案1】:

好的,我花了一天时间解决这个问题。关于的方案是正确的,在我的情况下的问题是,我创建了一个表名 car_color 而不是 car_colors...

的迁移

【讨论】:

    猜你喜欢
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多