TommyBB
TommyBB

Reputation: 47

How to run class method via URL in Rails 4

I'm real beginner in Rails.

I created app/services/xclass.rb class with some_method inside.

I need to execute some_method using url. For example, I want run this method when I execute in my browser url - http://application.com/notifications/send

I think it could be done through controller (notifications_controller) but how to do it?

I created only controller, with no model, just for launching some_method.

Upvotes: 2

Views: 104

Answers (2)

Richard Peck
Richard Peck

Reputation: 76774

Since you're a beginner, let me give you some ideas


MVC

Firstly, you need to appreciate that Rails is an MVC (model view controller) framework:

enter image description here

In short, this means that every time you send a "request" to Rails, it will be "routed" to the specific controller action which corresponds with that route.

This means that when you ask about how to fire a "class method", you're going to have to work within the confines of the MVC programming pattern. Here's how:

#config/routes.rb
resources :notifications do
   get :send, on: :collection #=> domain.com/notifications/send
end

#app/controllers/notifications_controller.rb
class NotificationsController < ApplicationController
   def send
       #call your class method here
       YourModel.class_method
   end
end

#app/lib/your_model.rb
class YourModel
   def self.class_method
      #do something here
   end
end

--

Rails

This is further supported by the fact that Rails is just a framework - in fact it's a gem (a great one) which runs on top of Ruby.

This means that even though some of the ways in which Rails works might seem somewhat alien to begin with, you have to remember that it basically just captures "requests" fed to it by a web sever, processing them with connectivity to the database etc.

The issue here is that as you're sending the request over HTTP, you have to work within the constraints of this protocol (specifically that it's stateless), and with Rails. As mentioned, Rails is MVC-based, which means that every request will be routed to your controller, which is why you have to create the corresponding route & controller action to handle it

If you use the code above (tweaked to your app), it should work for you

Upvotes: 0

johndavid400
johndavid400

Reputation: 1582

first, create a route:

get "notifications/send" => "notifications#some_action", :as => "send_notification"

Then create a controller action in your controller (ie. NotificationsController):

def some_action
  Xclass.some_method     # run the method you want
  redirect_to root_path  # redirect or whatever you want here
end

Now you can either visit the path http://your_app.com/notifications/send, or link to is using 'send_notifications_path' url helper in rails.

That should do it

Upvotes: 1

Related Questions