我正在尝试使用邮递员在rails中提交表单。我有这些参数
{
"book": {
"title": "rrewr",
"media": {
"name": "hello",
"format": "jpg"
}
}
}
提交此参数时。我在控制器中有这些用于创建书籍的代码
class Admin::BookController < ApplicationController
def create
@book = Book.new(book_params)
if(@book.save)
# redirect_to @post
end
end
private def book_params
params.require(:book).permit(:title, :media => [:name, :format])
end
end
我与书籍和媒体有一对一的关系。但是当我收到请求时。我得到这个错误
<ActiveRecord::AssociationTypeMismatch: Media(#70348614328640) expected, got {\"name\"=>\"hello\", \"format\"=>\"jpg\"} which is an instance of ActiveSupport::HashWithIndifferentAccess(#47385709875460)>
我已经在Rails文档中甚至在google中搜索了此内容,但找不到与我相同的问题。我有用于图书和媒体的这种模式
class Book < ApplicationRecord
belongs_to :media
end
class Media < ApplicationRecord
has_one :book
end
我有这些迁移。如果我做错了,请纠正我。我无法确定代码的哪一部分有误或缺少要添加的代码。
class CreateBooks < ActiveRecord::Migration[5.2]
def change
create_table :books do |t|
t.string :title
t.references :media, index: true, foreign_key: true
t.timestamps
end
end
end
class CreateMedia < ActiveRecord::Migration[5.2]
def change
create_table :media do |t|
t.string :name
t.string :format
t.timestamps
end
end
end
答案 0 :(得分:0)
在尝试用媒体创建书籍时。因此,请尝试以下操作:
class Admin::BookController < ApplicationController
def create
@media = Media.new(media_params)
ActiveRecord::Base.transaction do
@media.save!
@media.create_book!(book_params)
# redirect_to @post
end
end
private
def book_params
params.require(:book).permit(:title)
end
def media_params
params.require(:media).permit(:name, :format)
end
end
对于邮递员,请尝试传递如下参数:
media: {
name: '',
format: ''
},
book: {
title: ''
}
}