sql - 如何在rails中获取新创建记录的id并将id与另一个模型相关联-Rails
问题描述
我正在构建一个连接到反应应用程序的 Rails 应用程序。rails 应用程序有四个模型。为了争论起见,让我们假设它有两个模型:发送者和地址。发件人属于_一个地址,而一个地址有_许多发件人。因此,发件人的外键为 address_id。当发件人注册一个新帐户时,他也会创建一个地址。我正在尝试在我的 rails 控制器中构建一些东西,从而在创建新地址时它与发件人的 address_id 列相关联。我尝试根据这个 rails thread的解决方案构建自己独特的解决方案。但我没有取得太大的成功。我在地址控制器中实现了以下内容:
class AddressesController < ActionController::API
def show
@address = Address.find(params[:id])
end
def create
success = false
address = Address.new(address_params)
sender = @sender
if address.save
address_id = address.sender.build({address_id: address.id })
success = true if !address_id.empty?
else
render json: { errors: address.errors.full_messages }, status: :bad_request
end
if success = true
render json: {status: 'address created successfully'}, status: :created
else
render('edit')
end
end
def address_params
params.require(:address).permit(:streetname, :zipcode, :city, :country)
end
end
我在终端中收到此错误:
NoMethodError (undefined method `sender' for #<Address:0x00007f93b2576050>
Did you mean? senders
senders=
send):
app/controllers/addresses_controller.rb:21:in `create'
所以我在我的发件人控制器中放置了一个 attr_accessor:
class SendersController < ApplicationController
attr_accessor :sender
def show
@sender = Sender.find(params[:id])
end
def create
@sender = Sender.new(sender_params)
if @sender.save
render json: {status: 'sender created successfully'}, status: :created
else
render json: { errors: sender.errors.full_messages }, status: :bad_request
end
end
def sender_params
params.require(:sender).permit(:userid, :name, :email, :photourl, :address_id)
end
end
我觉得我在这里把事情复杂化了。所以我真的需要这个帮助。提前致谢!
解决方案
NoMethodError(未定义的方法“发件人”)
首先,错误触发是因为您与 有has_many
关系sender
,所以应该senders
不是sender
address.senders.build
当发件人注册一个新帐户时,他也会创建一个地址。我正在尝试在我的 rails 控制器中构建一些东西,从而在创建新地址时它与发件人的 address_id 列相关联。
其次,你的方法是错误的。您可以使用可用的belongs_to
关联方法。例如,在您的情况下,您可以致电@sender.build_address
address = @sender.build_address(address_params)
该
build_association
方法返回关联类型的新对象。该对象将从传递的属性中实例化,并设置通过该对象的外键的链接,但尚未保存关联的对象。
因此,最终创建如下所示(删除不必要的代码后)
def create
address = @sender.build_address(address_params)
if address.save
render json: {status: 'address created successfully'}, status: :created
else
render json: { errors: address.errors.full_messages }, status: :bad_request
end
end
推荐阅读
- json - 从 JSON 文件使用 i18n 时应用启动时出现黑屏
- android - 发送简单的 USB BulkTransfer 并接收响应
- ionic4 - Ionic 4 应用程序 - 检测用户是否关闭或打开 gps
- snowflake-cloud-data-platform - 在雪花中转义双引号
- python - 下载 MNIST 数据集时出现“HTTP 错误 403:禁止”错误
- c# - 异步套接字客户端一旦连接到第三方软件,就会继续监听传入的消息
- javascript - 在 keydown 的断点处停止时未触发 Javascript keyup
- html - 分页后是否可以重复内容?你能检测到分页符吗?
- javascript - 添加/删除类而不是单击时删除类
- swiftui - 颜色变化动画