0
votes

Hi I've been stuck on this problem for a while and would appreciate your help. I'm writing an API to allow an external source like a Browser Query String or a smartphone to enter some model User info in a form and hit the User create action to write the data to the db. Please tell me what I'm doing wrong with the code below.

I've also observed that if I have code like @user = User.new(params[:user]), that this approach only works when a user enters their data within the form.

And that if I have code such as @user = User.new( name: params[:name], location: params[:location], password = params[:password], email: params[:email]), that this code ONLY works for a Query string entry, but NOT both Query string AND regular form submission.

Why is that and how can I write the code above in the Users Controller Create action, so that it takes care of both situations?

URL used: localhost:3000/users/create?name=John&&[email protected]&&password=secret&&location=SanFrancisco&date=06122012

The date is of type string but it doesn't show up in the database. Why? Everything else does.

UsersController.rb

def create

@user = User.new(params[:user])

if @user.save
session[:uid] = @user.id
redirect_to thanks_path, notice: "Welcome #{@user.name}!"
else
redirect_to root_path
end

end

New User Form:

                <%=u.text_field :name, placeholder: "Name"%><br>
                <%=u.text_field :email, placeholder: "Email"%><br>
        <%=u.password_field :password, placeholder: "Password"%><br>
        <%=u.text_field :location, placeholder: "City"%><br> 
                <%=u.text_field :date, placeholder: "Date"%><br>

        <%if params[:partner_id]%>

        <%=u.hidden_field :partner_id, value: params[:partner_id]%>

        <%end%>

               <button class="btn btn-large btn-primary">Enter</button>

I also tried to create a separate method called remotecreate for User creation for something other than a regular web form. I entered remotecreate in the Query string but it didn't work.

def remotecreate @user = User.create(name: params[:name], email: params[:email], password: params[:password], location: params[:location], date: params[:date]) if @user.save session[:uid] = @user.id redirect_to thanks_path, notice: "Welcome #{@user.name}" else redirect_to root_path end end

Thanks!

1

1 Answers

1
votes

In your controller..

def create
  @user = User.new

  if params[:user] && params[:user][:email]  # Form submission
     @user = User.new(params[:user])

  else      # Url-inlined submission
    @user = User.new
    @user.attributes = params
  end

Didn't test the @user.attributes = params, but think it should work. You can always do

@user.email = params[:email]
@user.something = params[:somethings]
...