问题描述:

So I have been working on a web application with ruby on rails. I have form tags on my home page but when I click submit it fails to save the information to a guest or current user (I'm using devise) and redirect to a different page. The app isn't giving me any errors, it just won't take in the information. Thank you in advance for your help!

 class PageController < ApplicationController

def home

unless @button.nil?

@location = Place.create(:address => params[:place], :phone_number => params[:phone], :name => params[:title], :status => "not_purchased", :user_id => current_or_guest_user.id)

@location.save!

if @location.save && [email protected]?

redirect_to places_path

end

end

end

def index

end

def show

respond_to do |format|

format.html # show.html.erb

format.json { render json: @location }

end

end

def new

end

def create

unless @button.nil?

@location = Place.create(:address => params[:place], :phone_number => params[:phone], :name => params[:title], :status => "not_purchased", :user_id => current_or_guest_user.id)

@location.save!

if @location.save

format.html { redirect_to places_path}

format.json { render action: 'index', status: :created, location: places_path }

else

format.html { render action: 'new' }

format.json { render json: @location.errors, status: :unprocessable_entity }

end

end

end

def map

end

end

page/home.html.erb

<section id="content">

<div class="container">

<div class="inside">

<div class="wrapper row-1">

<div class="box col-1 maxheight">

<div class="border-right maxheight">

<div class="border-bot maxheight">

<div class="border-left maxheight">

<div class="left-top-corner maxheight">

<div class="right-top-corner maxheight">

<div class="right-bot-corner maxheight">

<div class="left-bot-corner maxheight">

<div class="inner">

<h3>Check Availability</h3>

<section style="border: 1px solid black;padding: 10px; margin:10px">

<h5>Add your site(s)</h5>

<b><%= field_set_tag '' do %> </b>

<%= form_tag do %>

<p>

<%= label_tag 'title', "Name of Site"%>

<%= text_field_tag 'title', nil, :placeholder => "Enter your site name", :size => 40%><br/>

</p>

<p>

<%= label_tag 'place', "Address"%>

<%= text_field_tag 'place', nil, :placeholder => "Enter your address", :size => 40%><br/>

</p>

<p>

<%= label_tag 'phone', "Phone number"%>

<%= text_field_tag 'phone', nil, :placeholder => "Enter your phone number", :size => 40%><br/>

</p>

<p><span><span><%[email protected] = submit_tag "Add me!", data: {:confirm => "Are you sure?"}%></span></span></p>

<% end %>

<% end %>

</div>

</div>

</div>

</div>

</div>

</div>

</div>

</div>

</div>

</div>

<div class="clear"></div>

</div>

</div>

</div>

</div>

</section>

网友答案:

You can probably get rid of that field_set_tag before your form. Not sure what that purpose is since you're not passing anything to it.

Then in your form_tag add this :

<%= form_tag @location do %>

Where @location is the object the form is about.

Also remove from your home controller this :

 @location = Place.create(:address => params[:place], :phone_number  => params[:phone], :name  => params[:title], :status => "not_purchased", :user_id => current_or_guest_user.id)
  @location.save!

You're not creating it there. You're creating it in in your create action. So instead in your #home action just instantiate what @location is :

 @location = Place.new user_id: current_or_guest_user.id
网友答案:

In your page/home.html.erb view, form_tag requires a URL that points to a controller action. Its blank ATM so its defaulting to a POST action, but it's not posting to anything. Try:

<%= form_tag @location do %>

Additionally, that @button instance variable is always going to be equal to nil as it doesn't seem to be initialized anywhere.

相关阅读:
Top