无法保存其他表中的数据。 Ruby on Rails 5

Posted

技术标签:

【中文标题】无法保存其他表中的数据。 Ruby on Rails 5【英文标题】:Can't save data from another table. Ruby on Rails 5 【发布时间】:2019-01-25 13:51:55 【问题描述】:

我有一张航班表和乘客表。创建新航班时,我需要能够向该航班添加多名乘客。

我已成功加入我的航班和乘客表,乘客现在显示在新的航班表中。现在的问题是我似乎无法拯救乘客。

飞行形式:

<label><%= form.label :passengers %></label>
    <%= collection_select(:passenger, :passenger_id, Passenger.all, :id, :first_name, ,  :multiple => true  )%>

flight.rb

has_and_belongs_to_many :passengers

passenger.rb

has_and_belongs_to_many :flights

flights_controller.rb

def create
@flight = Flight.new(flight_params)

params[:passenger][:passenger_ids].each do |passenger_id|
  unless passenger_id.empty?
  passenger = Passenger.find(passenger_id)
    @flight.passengers << passenger
  end
end

respond_to do |format|
  if @flight.save
    format.html  redirect_to @flight, notice: 'Flight was successfully created.' 
    format.json  render :show, status: :created, location: @flight 
  else
    format.html  render :new 
    format.json  render json: @flight.errors, status: :unprocessable_entity 
  end
 end
end

schema.rb

create_table "flights", force: :cascade do |t|
 t.string "origin"
 t.string "destination"
 t.string "dep_time"
 t.string "arr_time"
 t.integer "seats"
 t.integer "price"
 t.datetime "created_at", null: false
 t.datetime "updated_at", null: false
 t.integer "airline_id"
 t.index ["airline_id"], name: "index_flights_on_airline_id"
end


create_table "flights_passengers", id: false, force: :cascade do |t|
 t.integer "flight_id", null: false
 t.integer "passenger_id", null: false
 t.index ["flight_id", "passenger_id"], name: "index_flights_passengers_on_flight_id_and_passenger_id"
 t.index ["passenger_id", "flight_id"], name: "index_flights_passengers_on_passenger_id_and_flight_id"
end

create_table "passengers", force: :cascade do |t|
 t.string "first_name"
 t.string "last_name"
 t.datetime "created_at", null: false
 t.datetime "updated_at", null: false
end

【问题讨论】:

【参考方案1】:

您应该在保存之前将乘客添加到航班中,如下所示:

@flight.passengers << passenger

您将其添加到@boarding,看不到您在哪里声明?

【讨论】:

我发现了,抱歉这是一个错字。我现在已经做出了改变,它仍然没有保存。错误是“nil:NilClass 的未定义方法‘每个’”。任何想法 也许 collection_select 只发送一个 id,你可以检查一下。检查您的控制器参数,如果您不知道如何,请在创建操作开始时在控制器中调用byebug(或您已安装的任何内容)并在终端中调用params 感谢您的帮助@Alien。我是 Ruby on Rails 的新手,我对错误测试知之甚少。 Np。这并不难,您需要安装 gem,使用 Ruby on Rails 一切都很简单,您可以查看下一个链接:github.com/deivid-rodriguez/byebug 和 github.com/deivid-rodriguez/pry-byebug,不需要两者都选一个。您将在那里看到如何使用它的示例。 谢谢,我现在去看看

以上是关于无法保存其他表中的数据。 Ruby on Rails 5的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在 Ruby on Rails 中裁剪图像

ruby on rails 中的引导模式不起作用(不显示)

Ruby on Rails - 从 CSV 文件导入数据

如何配置 Devise for Ruby on Rails 以将电子邮件和密码存储在用户模型之外的其他位置?

保存到数据库帖子,但在检查 Ruby on Rails 中的 http 请求之前