问题描述
在我关于 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
。
谢谢, 提奥
解决方法
好的,我找到了。
这些字段没有出现的原因是我已经创建了一个“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