Just starting to learn rails, and I’m trying to pass a form from one view to another view…I’m assuming the way to do this would be to use partial renders.
I want to pass the partial for the form contained in /users/form to index.html.erb in the home view. I just want to create a new user, but from index.html.erb in the home view.
Relevant Code:
_form.html.erb (in users view)
<%= simple_form_for(@user) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :email %>
<%= f.input :condition, :hint => 'what should we look up for you?'%>
</div>
<div class="form-actions">
<%= f.button :submit, 'Begin curation' %>
</div>
<% end %>
users model (user.rb)
class User < ActiveRecord::Base
attr_accessible :condition, :email, :name
end
users_controller.rb
class UsersController < ApplicationController
# GET /users
# GET /users.json
def index
@users = User.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @users }
end
end
# GET /users/1
# GET /users/1.json
def show
@user = User.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @user }
end
end
# GET /users/new
# GET /users/new.json
def new
@user = User.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @user }
end
end
# GET /users/1/edit
def edit
@user = User.find(params[:id])
end
# POST /users
# POST /users.json
def create
@user = User.new(params[:user])
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'Thanks for sharing. We will be back with your curated information in 2-3 days time!' }
format.json { render json: @user, status: :created, location: @user }
else
format.html { render action: "new" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
# PUT /users/1
# PUT /users/1.json
def update
@user = User.find(params[:id])
respond_to do |format|
if @user.update_attributes(params[:user])
format.html { redirect_to @user, notice: 'User was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
# DELETE /users/1
# DELETE /users/1.json
def destroy
@user = User.find(params[:id])
@user.destroy
respond_to do |format|
format.html { redirect_to users_url }
format.json { head :no_content }
end
end
end
I’m sure this is an easy fix, I just don’t know the syntax. I’ve checked other places, and haven’t found anything that helps me.
I would bet my life you don’t have an @user variable defined. SimpleForm needs an instance variable from the proper model to effectively do its magic with the input fields. It gives that error if your variable is not instantiated.
model_name is called on NilClass. NilClass is your @user.
Try this instead:
Update