Michael Sync
Michael Sync

Reputation: 5014

Rails: Controllers and Route

I'm very new to Rails.

Q1. What is the route between controller and view?

Let's say I have a controller called store_controller. I have no method in that controller but I have a view called "list"

then, I'm able to call localhost:3000/store/list ... Why am I able to call this without having list action in controller?

Q2. What if I add list method as below in controller? What will be the route if I call localhost:3000/store/list? the list method from controller and then, view? OR View first and list method from controller? or list method from controller will never be called?

def list
  logger.Write 'list in Controller'
end

Based on my test, list method from controller never get called. I'm not sure why. I'm following "Agile Web Development with Rails, 3rd Edition" book and I'm stuck at "Task C: Cart Creation".

Q3. How to call the method of controller from view without using helper or without having any template file for that method? Let's say I have a method called DoSomething in Controller.

def DoSomething
  logger.Write 'd'
end

Can I call this method from view as below?

<%= link_to "Do It", :action => "DoSomething" %>

Based on my test, it doesn't work.

Edit: Actually, view can call controller via Http Post. Let's say what we see on screen is called view. If you click on button, it will be http-post and will call controller. this is what i mean by calling the method of controller from view..

Q4. How to write the log in custom log file? if I use logger.Write then all log will be written into development.log. How can I have my custom log file?

Q5. Is there any way to create like a scheduler in Ruby and Rails? Should I use Ruby or Rails if I want to create something like a scheduler or back-end job? like pinging one feed every seconds and if new changes then get the data and insert them into database.

Upvotes: 0

Views: 633

Answers (1)

Toby Hede
Toby Hede

Reputation: 37143

This might need to be several questions :P ... but it is also a good basis for a wiki.

Q1. Rails uses convention - if you have a view called "list", rails is smart enough to treat this as if a list method existed. Of course, as there is no method you will not have any logic, but the view will still be rendered.

Q2. If you add a list method, Rails will now call this. Again, Rails is smart enough to assume that a list action maps to the list view. If you want to calla different view, you can use the controller's built-in "render" method.

Q3. In general, you should NOT call a controller method from the View. It's simply not part of the MVC model. You can pass data into a view, you can use a helper for any view-specific methods required. If you have extensive custom logic you can start pushing code into your models and even building modules and classes that live in your /lib directory.

Q4. There are a number of logging plugins and extensions. I have never used them, as I always found the default more than enough.

Q5. This is definitely a different question altogether. Suggest starting a new one, but do a search as I know this has been addressed quite extensively on SO before. There are a number of mechnanisms that work with Rails for scheduling.

Upvotes: 2

Related Questions