Rails 中的一对一关系返回 nil 而不是 Collection Proxy
One-to-One Relationship in Rails returning nil instead of Collection Proxy
我在 rails 4 中遇到一对一关联的问题。代码没有返回缺少的方法,但我没有得到。我试过添加 class_names、外键、主键我想我只是做错了。任何帮助将不胜感激。
代码
client_submission_data.rb
class ClientSubmissionData < ActiveRecord::Base
belongs_to :client_submissions, class_name: 'ClientSubmission'
end
client_submission.rb
class ClientSubmission < ActiveRecord::Base
belongs_to :clients
has_one :client_submission_data
has_attached_file :csv_file
end
schema.rb
create_table "client_submission_data", force: :cascade do |t|
t.integer "client_submissions_id"
t.text "json"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "client_submissions", force: :cascade do |t|
t.text "json"
t.integer "clients_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "client_id"
t.string "name"
t.string "rows"
t.string "csv_file_file_name"
t.string "csv_file_content_type"
t.integer "csv_file_file_size"
t.datetime "csv_file_updated_at"
end
命令
rails c
cs = ClientSubmission.new
cs.client_submission_data
#=> nil
csd = ClientSubmissionData.new
cs.client_submission_data << csd
NoMethodError: undefined method '<<' for nil:NilClass
cs.client_submission_data = csd
ActiveModel::MissingAttributeError: can't write unknown attribute 'client_submission_id`
belongs_to 协会使用单数术语。
belongs_to :client_submission
belongs_to :client
此外,我不确定您是否需要指定 class 名称,因为您指的不是其他型号。在您的架构中,您有 clients_id 和 client_id,它应该是 client_id 和 client_submission_id 而不是 client_submissions_id。如果您同时更改 belongs_to 语句 运行 一些迁移以更改这些字段,您应该没问题。
一般model/class_name是单数,table是复数。
你得到 nil
因为没有 client_submission_data
.
如果要分配 client_submission_data
,请执行以下操作:
cs = ClientSubmission.new
csd = ClientSubmissionData.new
cs.client_submission_data = csd
cs.save
使用 =
而不是 <<
。
我在 rails 4 中遇到一对一关联的问题。代码没有返回缺少的方法,但我没有得到。我试过添加 class_names、外键、主键我想我只是做错了。任何帮助将不胜感激。
代码
client_submission_data.rb
class ClientSubmissionData < ActiveRecord::Base
belongs_to :client_submissions, class_name: 'ClientSubmission'
end
client_submission.rb
class ClientSubmission < ActiveRecord::Base
belongs_to :clients
has_one :client_submission_data
has_attached_file :csv_file
end
schema.rb
create_table "client_submission_data", force: :cascade do |t|
t.integer "client_submissions_id"
t.text "json"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "client_submissions", force: :cascade do |t|
t.text "json"
t.integer "clients_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "client_id"
t.string "name"
t.string "rows"
t.string "csv_file_file_name"
t.string "csv_file_content_type"
t.integer "csv_file_file_size"
t.datetime "csv_file_updated_at"
end
命令
rails c
cs = ClientSubmission.new
cs.client_submission_data
#=> nil
csd = ClientSubmissionData.new
cs.client_submission_data << csd
NoMethodError: undefined method '<<' for nil:NilClass
cs.client_submission_data = csd
ActiveModel::MissingAttributeError: can't write unknown attribute 'client_submission_id`
belongs_to 协会使用单数术语。
belongs_to :client_submission
belongs_to :client
此外,我不确定您是否需要指定 class 名称,因为您指的不是其他型号。在您的架构中,您有 clients_id 和 client_id,它应该是 client_id 和 client_submission_id 而不是 client_submissions_id。如果您同时更改 belongs_to 语句 运行 一些迁移以更改这些字段,您应该没问题。
一般model/class_name是单数,table是复数。
你得到 nil
因为没有 client_submission_data
.
如果要分配 client_submission_data
,请执行以下操作:
cs = ClientSubmission.new
csd = ClientSubmissionData.new
cs.client_submission_data = csd
cs.save
使用 =
而不是 <<
。