2016-08-21 25 views
0

我正在开发一个简单的轨道应用程序,应该是一个音乐会注册应用程序。基本上应该做的是从一个人那里获取信息,然后将它们保存在DB中也会生成一张带有唯一ID的票证。问题是表单没有显示票据的字段。这些字段显示的唯一时间是某处出现错误时。 enter image description here隐藏字段的未知原因在轨道上嵌套窗体ruby 5

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+\-.][email protected][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 

回答

1

在创建操作线:

@ticket = @participant.tickets.build 

是什么增加了日电子票。因此,使用rails嵌套表单,或者甚至在使用simple_form时,您需要使用您想要的记录数来实例化子关系。所以它会循环遍历它们并显示它们。所以,如果你想一票当new动作呈现,只需拨打:

@participant.tickets.build 

在新的动作。

+0

谢谢你解决了一个问题。 现在我意识到没有任何关于'Ticket'的信息被保存在'db'中。除了id之外,我得到所有'nil'。任何线索? –

+0

参与者正在保存,但票证不是?我看到你把一个reject_if块包含:'attributes ['kind']。blank?',但我在任何地方都看不到对某种kind属性的引用。这是你正在使用的东西吗? – agmcleod

+0

我认为这是来自互联网的糟糕的复制粘贴。参与者正在保存并且票据正在保存,但它仅保存创建和更新的次数,但其他属性未保存。 –