2

i have a rails app. i have strange problem in saving form

this is my ticket model .

class Ticket < ApplicationRecord
  belongs_to :user
  has_many :ticketissues , inverse_of: :ticket

  accepts_nested_attributes_for :ticketissues, :reject_if => lambda { |a| a[:body].blank? }

end

this is ticketisue model

    class Ticketissue < ApplicationRecord

      belongs_to :user
      belongs_to :ticket

     validates :body, presence: true
    end

this is ticket controller

class TicketsController < ApplicationController
  before_action :set_ticket, only: [:show, :edit, :update, :destroy]

  # GET /tickets
  # GET /tickets.json
  def index
    @tickets = Ticket.all
  end

  # GET /tickets/1
  # GET /tickets/1.json
  def show
  end

  # GET /tickets/new
  def new
    @ticket = Ticket.new
  end

  # GET /tickets/1/edit
  def edit
  end

  # POST /tickets
  # POST /tickets.json
  def create
    @ticket = Ticket.new(ticket_params)
    @ticket.user_id = current_user.id
    @ticket.ticketissues.build

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

  # PATCH/PUT /tickets/1
  # PATCH/PUT /tickets/1.json
  def update
    respond_to do |format|
      if @ticket.update(ticket_params)
        format.html { redirect_to @ticket, notice: 'Ticket was successfully updated.' }
        format.json { render :show, status: :ok, location: @ticket }
      else
        format.html { render :edit }
        format.json { render json: @ticket.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /tickets/1
  # DELETE /tickets/1.json
  def destroy
    @ticket.destroy
    respond_to do |format|
      format.html { redirect_to tickets_url, notice: 'Ticket was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_ticket
      @ticket = Ticket.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def ticket_params
      params.require(:ticket).permit(:subject, :subsubject, :user_id, ticketissues_attributes: [ 
        :body, :id, :_destroy] )
      #params.require(:ticket).permit!
    end
end

and my view is like this

<%= f.input :subject , collection: [ "تغییر اطلاعات کسب و کار",
                                     "تغییر اطلاعات یک کوپن",
                                     "سایر موارد"] %>

    <%= f.input :subsubject %>
   <!-- <%= f.association :user %> -->
  </div>

      <%= f.simple_fields_for :ticketissue do |p| %>
        <%= p.input :body  %>
      <% end %>

  <div class="form-actions">
    <%= f.button :submit %>
  </div>
<% end %>

but when i want to create a ticket , form will not save to database and i get this error:

Started POST "/tickets" for 127.0.0.1 at 2017-04-11 23:52:33 +0430

Processing by TicketsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"fsl6nTe0PjmBKpeuh16BRFlYOw0MB93LEYDVEAl6TtT/uu/LwGTA0P2q0bRxIxBUqHqZINXHntrZLt7MuCG84Q==", "ticket"=>{"subject"=>"تغییر اطلاعات کسب و کار", "subsubject"=>"lk", "ticketissue"=>{"body"=>"lkjkjkjkjkkjkj"}}, "commit"=>"Create Ticket"}
Unpermitted parameter: ticketissue

but when i use console and this command:

Ticket.create(subject: 'test' , subsubject: 'ticket test' , ticketissues_attributes: [{body: "[some thing" }] )

every things work fines and all data save.

tanks for read and help.

1
  • Change your strong param from ticketissues_attributes: to ticket_issue: Commented Apr 13, 2017 at 11:50

1 Answer 1

3

You must use the plural here

= f.simple_fields_for :ticketissues do |p|
Sign up to request clarification or add additional context in comments.

2 Comments

I did it before but i don't know why when i use :ticketissues whole body area (filed) disappear. and form remind with just subject and subsubject (no body text area).
That's probably because @ticket.ticketissues is nil and therefore no issues are rendered. Are you using this in new or edit?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.