ruby-on-railsform-for

Custom form_for to validation record


I am trying to create a custom form_for where I check if the record exists in the table or not. I've done tons of research but haven't come up with anything useful.

My current approach is to create a simple search form and display all similar records. However, that's not what I am looking for. Ideal scenario would be:

  1. Get record's name from form_for
  2. Check if this record present
  3. If present - redirect to one page. If not - redirect to another page

My controller:

def validate_name
  @room = Room.new
  name = params[:name]

  if name != nil
    puts "Redirect to page A"
  else
    puts "Redirect to page B"
  end
end

The problem here is that whenever the user comes to the page it automatically triggers the code above. My goal is to create a form validation that tries to find the exact record and then redirect based on if else condition.

Current form_for:

= form_for(Room.new, url: name_room_path, method: :get, action: :validate_name) do |f|
  = f.text_field :name
  = f.submit

I am sure that my form is incorrect too because I got lost. I found ways to create custom forms but can't figure out how to trigger database check based on the user's input.

PS: these are not new or update actions.

Thank you for your help and time.


Solution

  • Try this:

    class RoomsController < ActionController::Base
      def validate_name
        if params[:name] && Room.where(name: params[:name]).last.present?
          puts "Redirect to page A"
        elsif params[:name] && Room.where(name: params[:name]).last.nil?
          puts "Redirect to page B"
        end
      end
    end
    

    in routes.rb:

    get '/rooms/validate_name', to: 'rooms#validate_name'
    

    in view:

    <%= form_tag(rooms_validate_name_path, :method => :get  )do %>
      <%= text_field_tag :name %>
      <%= submit_tag %>
    <% end %>