0

在我关于 has_one 关联的表单上,这些字段不会以单数形式出现。

<%= f.fields_for :pack_social_media_sur_mesure, @commande.pack_social_media_sur_mesure do |ff| %>

仍然是空的

我想我错过了什么……

我的模型:

指挥模型:

class Commande < ApplicationRecord
  belongs_to :user
  validates_presence_of :user
  has_one :pack_social_media_sur_mesure, dependent: :destroy
  accepts_nested_attributes_for :pack_social_media_sur_mesure, allow_destroy: true
end

PackSocialMediaSurMesure 模型:

class PackSocialMediaSurMesure < ApplicationRecord
  belongs_to :commande
  ...
end

我的控制器:

class CommandeStepsController < ApplicationController
  ...    
  def update
    @user_id = current_user.id
    @user = current_user
    @commande = @user.commande
    @commande.update(commande_params)
  end
  ...
  def commande_params
    params.require(:commande).permit(:id,..., pack_social_media_sur_mesure_attributes: [:id, ...])
  end
end

我的表格:

<%= form_for @commande, url: wizard_path, html: { class: "pack-slide" }, method: :put do |f| %>
  <%= f.fields_for :pack_social_media_sur_mesure, @commande.pack_social_media_sur_mesure do |ff| %>
    <%= ff.select :question1 %>
    ...
  <% end %>
  <%= f.submit %>
<% end %>

PS:我在这个表格中使用了 wicked gem,这就是为什么wizard_path

谢谢,泰奥

4

1 回答 1

0

好的,我找到了。

没有出现这些字段的原因是我已经创建了一个“commande”而不是一个“pack_social_media_sur_mesure”。或者“邪恶的宝石”将我们带到编辑路径,但如果它不存在,我们将无法编辑它。

解决方案是在创建“订单”时创建 pack_social_media_sur_mesure,如下所示:

class CommandesController < ApplicationController
  before_action :set_commande, only: [:show, :edit, :update, :destroy]

  ...

  def create
    @commande = current_user.create_commande(commande_params)
    if @commande.save
      if @commande.pack_social_media_sur_mesure == nil
        @commande.create_pack_social_media_sur_mesure(...)
      end
      redirect_to ...
    else
      render :new
    end
  end

  ...

  def set_commande
    @commande = current_user.commande
  end
于 2020-12-29T18:04:31.613 回答