Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Submit button does not work unless I refresh the page form_for Rails

I have an app that has a problem model and when I go to create a record the submit button does nothing. No errors given it just simply doesnt execute, unless I refresh the page and attempt add it again. The same happens when I go to update a record.

Here is my controller

class ProblemsController < ApplicationController
 include Concerns::Votes
def index
 @problems = Problem.all
end

def show
 @problem = find_problem
end

def new
 @problem = Problem.new
end

def edit
 @problem = find_problem
end

def create
 @problem = current_user.problems.new(problem_params)
 @problem.save
 redirect_to @problem
end

def update
 @problem = find_problem
  if @problem.update_attributes(problem_params)
    redirect_to @problem
  else
    redirect_to @problem
  end
end

private

def find_problem
 @problem = Problem.find(params[:id])
end

def problem_params
params.require(:problem).permit(:name, :description, :url)
end 
end

Here is my _form.html.erb partial that I am rendering on new.html

<div class="row">
<div class="large-12 columns">
<%= form_for @problem do |f| %>
<label>Name</label>
<%= f.text_field :name, placeholder: "Name your problem!" %>
</div>
 <div class="large-8 columns">
<%= f.text_field :url, placeholder: "Link to any supporting material" %>
 </div>
 <div class="large-12 columns">
 <%= f.text_area :description %>
 </div>
 <div class="large-12 columns">
 <%= f.submit "Create" %>
 </div>
 </div>
 <% end %>

I have resources :problems in my routes.

Here for good measure is my show.html.erb as well.

<%= div_for @problem do %>
<%= link_to 'Edit', edit_problem_path(@problem) %>
<h2><%= @problem.name %> (<%= @problem.cached_votes_score %>)</h2>
<a =href"<%= @problem.url %>"><%= @problem.url %></a>
<p><%= @problem.description %><p>
By <%= @problem.user.name %></br>
<a class="button"<%= link_to 'Up', {:controller => 'problems', :action => 'up_vote'}, {:method => :post } %></a>
<a class="button"<%= link_to 'Down', {:controller => 'problems', :action => 'down_vote'}, {:method => :post } %></a>
<%= link_to 'Edit', edit_problem_path(@problem) %> |
<%= link_to 'Back', problem_path %>
<% end %>

Here is my index.html.erb

<div class="row">
<div class="large-12 columns">
  <% @problems.each do |problem| %>
    <h1><small><%= problem.cached_votes_score %></small> <%= link_to problem.name, problem %></h1>
 <% end %>
 </div>
 <%= link_to 'New Problem', new_problem_path %>
</div>

I really cant understand why it works if i refresh the page but otherwise it doesnt work at all.

like image 434
DMH Avatar asked Apr 28 '14 11:04

DMH


People also ask

Why submit button is not working?

Sometimes the problem is caused by old versions of the Javascript files, cached by your browser and can be fixed by clearing the browser cache. You can use the browser console of your browser for debugging. After the Javascript error is fixed, the submit button will automatically be enabled.

How do I make a Submit not refresh the page?

Use jQuery's submit event to handle the form submit, add return false; at the end of the submit handle function to prevent the page to reload. return false ; });

Does submit button need to be inside?

Yes, structurally the submit button needs to be inside a form element for the document to be valid X/HTML. But visually you can position the submit button anywhere you want with appropriate CSS (float, absolute/relative positioning, etc).

What happens when submit button is clicked?

The form will be submitted to the server and the browser will redirect away to the current address of the browser and append as query string parameters the values of the input fields.


1 Answers

Your HTML is invalid, the submit button is actually not nested under the form tag. Try changing your view code to this:

<div class="row">
  <div class="large-12 columns">
    <%= form_for @problem do |f| %>
      <label>Name</label>
      <%= f.text_field :name, placeholder: "Name your problem!" %>
      <div class="large-8 columns">
        <%= f.text_field :url, placeholder: "Link to any supporting material" %>
      </div>
      <div class="large-12 columns">
        <%= f.text_area :description %>
      </div>
      <div class="large-12 columns">
        <%= f.submit "Create" %>
      </div>
    <% end %>
  </div>
</div>
like image 81
fivedigit Avatar answered Oct 28 '22 02:10

fivedigit