2017-10-19 6 views
0

J'ai une forme qui ressemble à ceci:rendu un fichier js.erb lors de la soumission de formulaire ajax Rails

<div class= "parent-container"> 
    <%= form_with scope: @company, url: companies_path, html: { class: "form-inline", remote: true, "data-type" => :js, id: "new-company-create" }, local: true do |f| %> 
    <div class= "form-group"> 
     <%= f.label :nil, 'Company Name:', :class => 'sr-only'%> 
     <%= f.text_field :nil, :class => 'form-control-plaintext' %> 
    </div> 
    <div class="form-group mx-sm-3"> 
     <%= f.label :name, 'Enter a Company Name : ' %> 
     <%= f.text_field :name, :class => 'form-control large-input-grp', :placeholder => "Enter any Company Name" %>  
    </div> 
    <%= button_to "Create a Company", companies_path, class: "btn btn-default", id: "create_company_main", :type => "submit", :method => "post"%> 
    <% end %> 
</div> 

que je suis en train de soumettre via ajax Rails et réalisé quelle douleur un processus simple peut être .

Dans mon contrôleur, la forme des messages à cette méthode:

def create 
    @newCompany = Company.new(company_params) 
    respond_to do |format| 
    if @newCompany.save 
     format.js 
     format.html { render :nothing => true, :notice => 'Company created successfully!' } 
     format.json { render json: @newCompany, status: :created, location: @newCompany } 
    else 
     format.html { render action: "new" } 
     format.json { render json: @newCompany, status: :unprocessable_entity } 
    end 
    end  
end 

et j'ai essayé plusieurs combinaisons dans le bloc respond_to do |format|, mais rien ne semble fonctionner. Rien de ce que je fais, semble me renvoyer le fichier _create.js.erb à la recherche d'un code HTML.

Dans mon terminal, je peux voir ce qui suit affiché lors de la demande de poste:

Processing by CompaniesController#create as HTML 

Les tutoriels que je pouvais voir au sujet de ce sont tous pas à jour et je suis en train de comprendre rails, étape par étape, mais je suis coincé à quelque chose d'aussi basique que ça.

Je ne comprends pas vraiment pourquoi je dois faire format.html et format.json même si je veux un fichier JS du contrôleur et comment puis-je obtenir le fichier js.erb à partir du contrôleur.

+0

pourquoi avez-vous besoin de mentionner ' "type de données"=>: js' lorsque vous avez mentionné alredy' distance: true'? – Gabbar

+0

J'essayais différentes options. Garder seulement à distance: vrai n'a pas fonctionné. – user122121

+0

'remote: true' ne devrait pas être dans' html', mais être transmis directement comme * form_with * param, comme 'url: companies_path'. –

Répondre

2

Son envoi de demande html parce que vous avez mentionné le lien sur votre bouton d'envoi qui se comporte comme <a href="/compaines">Create a Company</a>, et il frappe votre action sans soumettre votre formulaire.

Essayez ceci: -

<%= form_for(@company, url: companies_path_path, :html => { class: "form-inline", id: "new-company-create" },remote: true, method: 'POST') do |f| %> 
    <div class= "form-group"> 
    <%= f.label :nil, 'Company Name:', :class => 'sr-only'%> 
    <%= f.text_field :nil, :class => 'form-control-plaintext' %> 
    </div> 
    <div class="form-group mx-sm-3"> 
    <%= f.label :name, 'Enter a Company Name : ' %> 
    <%= f.text_field :name, :class => 'form-control large-input-grp', :placeholder => "Enter any Company Name" %>  
    </div> 

    <%= button_tag(type: 'submit', class: "btn btn-default", id: "create_company_main") do %> 
    Create a Company 
    <% end %> 
<%end%> 
+0

j'ai fait quelques changements, s'il vous plaît jeter un oeil à nouveau, son envoi de demande html parce que vous avez mentionné le lien sur votre bouton soumettre. s'il vous plaît essayez ce nouveau code, j'espère qu'il va envoyer une requête ajax à votre contrôleur – Gabbar

+0

Merci, cela a fonctionné! Où avais-je tort? – user122121

+0

Donc, en ajoutant le lien dans le bouton Soumettre était la réponse, vous devriez mettre à jour cela sur votre réponse. Merci beaucoup! – user122121