rails 5 上 ruby 隐藏字段嵌套形式的未知原因
Unknown reason for hidden fields nested forms ruby on rails 5
我正在开发一个简单的 rails 应用程序,它应该是一个音乐会注册应用程序。基本上应该做的是从一个人那里获取信息,然后将它们保存在 DB
中,同时生成一个具有唯一 ID 的票证。问题是表格没有显示票证的字段。只有在某处出现错误时才会显示这些字段。
participants_controller
def new
@participant = Participant.new
@ticket = @participant.tickets.build
end
def create
@participant = Participant.new(participant_params)
@ticket = @participant.tickets.build
1.times{@ticket}
if @participant.save
flash[:success] = "An Email as been sent to #{@participant.email}"
redirect_to root_path
else
render :new
end
end
private
def participant_params
params
.require(:participant)
.permit(:first_name,:last_name,:phone,:email,:gender,:email_confirmation,:participant_id,
:tickets_attributes => [:id,:vip,:quantity])
end
那么这是表格
= simple_form_for @participant do |f|
= f.error_notification
= f.input :first_name
= f.input :last_name
= f.input :phone
= f.input :email
= f.input :email_confirmation
= f.input :gender, collection: ['M','F'], as: :radio_buttons
= f.simple_fields_for :tickets do |ticket|
= ticket.input :vip , label: 'Want a vip ticket? ',collection: ['No','Yes'] , include_blank: false
= ticket.input :quantity , label: 'How many tickets?' , include_blank: false, collection: 1..100
= f.button :submit , 'Get Tickets'
然后是模特
ticket model
class Ticket < ApplicationRecord
belongs_to :participant
# validates :quantity, presence: true
validates :participant , presence: true
end
participant model
class Participant < ApplicationRecord
validates :first_name,:last_name, presence: true
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, length: { maximum: 255 },
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false },
confirmation: true
validates :email_confirmation, presence: true
VALID_PHONE_NUMBER = /\d/
validates :phone, presence: { message: "Won't give it to NSA promise" }, format:{with: VALID_PHONE_NUMBER},
length: {is: 11}
has_many :tickets , inverse_of: :participant
accepts_nested_attributes_for :tickets,
reject_if: lambda {|attributes| attributes['kind'].blank?}
end
创建操作中的行:
@ticket = @participant.tickets.build
是什么加票。因此,对于 rails 嵌套表单,或者甚至在使用 simple_form 时,您需要用您想要的记录数来实例化子关系。因此它将遍历它们并按原样显示它们。因此,如果您在 new
操作呈现时想要一张票,只需调用:
@participant.tickets.build
在新动作中。
我正在开发一个简单的 rails 应用程序,它应该是一个音乐会注册应用程序。基本上应该做的是从一个人那里获取信息,然后将它们保存在 DB
中,同时生成一个具有唯一 ID 的票证。问题是表格没有显示票证的字段。只有在某处出现错误时才会显示这些字段。
participants_controller
def new
@participant = Participant.new
@ticket = @participant.tickets.build
end
def create
@participant = Participant.new(participant_params)
@ticket = @participant.tickets.build
1.times{@ticket}
if @participant.save
flash[:success] = "An Email as been sent to #{@participant.email}"
redirect_to root_path
else
render :new
end
end
private
def participant_params
params
.require(:participant)
.permit(:first_name,:last_name,:phone,:email,:gender,:email_confirmation,:participant_id,
:tickets_attributes => [:id,:vip,:quantity])
end
那么这是表格
= simple_form_for @participant do |f|
= f.error_notification
= f.input :first_name
= f.input :last_name
= f.input :phone
= f.input :email
= f.input :email_confirmation
= f.input :gender, collection: ['M','F'], as: :radio_buttons
= f.simple_fields_for :tickets do |ticket|
= ticket.input :vip , label: 'Want a vip ticket? ',collection: ['No','Yes'] , include_blank: false
= ticket.input :quantity , label: 'How many tickets?' , include_blank: false, collection: 1..100
= f.button :submit , 'Get Tickets'
然后是模特
ticket model
class Ticket < ApplicationRecord
belongs_to :participant
# validates :quantity, presence: true
validates :participant , presence: true
end
participant model
class Participant < ApplicationRecord
validates :first_name,:last_name, presence: true
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, length: { maximum: 255 },
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false },
confirmation: true
validates :email_confirmation, presence: true
VALID_PHONE_NUMBER = /\d/
validates :phone, presence: { message: "Won't give it to NSA promise" }, format:{with: VALID_PHONE_NUMBER},
length: {is: 11}
has_many :tickets , inverse_of: :participant
accepts_nested_attributes_for :tickets,
reject_if: lambda {|attributes| attributes['kind'].blank?}
end
创建操作中的行:
@ticket = @participant.tickets.build
是什么加票。因此,对于 rails 嵌套表单,或者甚至在使用 simple_form 时,您需要用您想要的记录数来实例化子关系。因此它将遍历它们并按原样显示它们。因此,如果您在 new
操作呈现时想要一张票,只需调用:
@participant.tickets.build
在新动作中。