gpt4 book ai didi

ruby-on-rails - 预期模型(#...),使用选择标记时出现字符串(#...)错误

转载 作者:数据小太阳 更新时间:2023-10-29 08:26:04 24 4
gpt4 key购买 nike

我搭建了一个简单示例来说明我遇到的问题。在这个例子中,我有一艘 Starship 和一艘 Pilot。我希望能够在星际飞船创建时将现有飞行员分配给它。

星舰.rb

class Starship < ApplicationRecord
has_one :pilot

validates :name, presence: true
end

飞行员.rb

class Pilot < ApplicationRecord
belongs_to :starship, optional: true

validates :name, presence: true
end

starships/_form.html.erb

<div class="field">
<%= f.label :pilot %>
<%= f.select :pilot, Pilot.all %>
</div>

starships_controller.rb

  def starship_params
params.require(:starship).permit(:name, :pilot)
end

参数散列

{"name"=>"Nostromo", "pilot"=>"#<Pilot:0x007f85ff547f90>"}

我得到了这个错误

Pilot(#70106745549840) expected, got String(#70106709663840)

我看到我的 pilot 是作为散列中的字符串发送的,但我似乎没有找到我应该如何做的其他方式。

最佳答案

使用集合选择并仅返回飞行员 ID。

<%= f.collection_select(:pilot_id, Pilot.all, :id, :name) %>

请注意,您需要更改 starship_params

  def starship_params
params.require(:starship).permit(:name, :pilot_id)
end

为 :pilot_id 添加一个 attr_accessor

class Starship < ApplicationRecord
attr_accessor :pilot_id

修改您的创建如下...

def create
@starship = Starship.new(starship_params)
@starship.pilot = Pilot.find(@starship.pilot_id)
respond_to do |format|
...

关于ruby-on-rails - 预期模型(#...),使用选择标记时出现字符串(#...)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43475498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com