gpt4 book ai didi

ruby-on-rails - Ruby on Rails 从一种形式保存在两个表中

转载 作者:行者123 更新时间:2023-12-04 07:37:19 25 4
gpt4 key购买 nike

我有两个模型酒店和地址。关系是:

class Hotel
belongs_to :user
has_one :address
accepts_nested_attributes_for :address

class Address
belongs_to :hotel

我需要用一种形式保存在hotels 表和addresses 表中。

输入表单很简单:

<%= form_for(@hotel) do |f| %>

<%= f.text_field :title %>
......other hotel fields......

<%= f.fields_for :address do |o| %>
<%= o.text_field :country %>
......other address fields......

<% end %>
<% end %>

酒店控制员:

class HotelsController < ApplicationController
def new
@hotel = Hotel.new
end

def create
@hotel = current_user.hotels.build(hotel_params)
address = @hotel.address.build
if @hotel.save
flash[:success] = "Hotel created!"
redirect_to @hotel
else
render 'new'
end
end

但是这段代码不起作用。

加 1酒店参数:

  private
def hotel_params
params.require(:hotel).permit(:title, :stars, :room, :price)
end

添加 2

主要问题是我不知道如何正确呈现表单。这个 ^^^ 表单甚至不包括地址字段(国家、城市等)。但是如果在行中

<%= f.fields_for :address do |o| %> 

我将 :address 更改为 :hotel,我得到了表单中的地址字段,但在这种情况下当然没有任何内容保存在 :address 表中。我不明白从 1 个表格保存到 2 个表格的原理,非常抱歉,我是 Rails 的新手...

最佳答案

您使用错误的方法将您的 child 附加到 parent 身上。而且它是has_one relation ,所以你应该使用 build_model 而不是 model.build。你的 newcreate 方法应该是这样的

class HotelsController < ApplicationController
def new
@hotel = Hotel.new
@hotel.build_address #here
end

def create
@hotel = current_user.hotels.build(hotel_params)

if @hotel.save
flash[:success] = "Hotel created!"
redirect_to @hotel
else
render 'new'
end
end

更新

您的hotel_params 方法应该如下所示

def hotel_params
params.require(:hotel).permit(:title, :stars, :room, :price,address_attributes: [:country,:state,:city,:street])
end

关于ruby-on-rails - Ruby on Rails 从一种形式保存在两个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24746906/

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