Rails mysql update

I'm pretty new to Ruby on Rails, I came from PHP and i've realised it's not just as simple as getting syntax down, there's a lot of good structure practices to take on board too.

While what I have currently works, I'm almost certain I'm not doing it the best way.

Here's what I'm doing. I'm tracking clicks via AJAX and updating a record in the database to monitor popular access points.

Here's my controller:

class AjaxController < ApplicationController

  def track    
    elem = Tracking.where('element = ?', params[:element]).first
    if elem.nil?
      Tracking.create(:element => params[:element], :count => 0)
    else
      elem.count = elem.count + 1
      elem.save
    end
    render :text => 'ok'
  end

  def validate
    if request.xhr? && respond_to?(params[:callback])
      return self.send(params[:callback])
    end
    no_access
  end

  private

  def no_access
    redirect_to root_url
  end

end

Here's my model:

class Tracking < ActiveRecord::Base
  attr_accessible :element, :count
end

tracking table:

+-------------------------+
| id | element    | count |
+-------------------------+
| 1  | bazinga    |   3   |
---------------------------

Could anyone steer me in the right direction, if something could be refactored?

Answers


Welcome to rails :), So I would see some re factoring with regarding to rails conversions. But these can be over rolled, if you have any specific reason.

1 - Your model name (I think this you got right, just double check the table name)

Ideally rails will have the tables in plural and models in the singular. so your table should be trackings and your model should be Tracking

2 - controller

Since you are referring to your Tracking model, by convention, the controller name should be TrackingsController,

and rails uses, REST approach, so try your best to keep your default 7 controller actions (as long as they are meaningful in the context.). default REST controller actions are

index

show

new

create

edit

update

destroy

So I think your click can be matched as Trackings -> create

and probably no_access method can be moved to ApplicationController, as it can be used by any controller

Program logic

Normally we dont write the domain login in controller, so your below part in controller

elem = Tracking.where('element = ?', params[:element]).first
if elem.nil?
  Tracking.create(:element => params[:element], :count => 0)
else
  elem.count = elem.count + 1
  elem.save
end

can be moved to model like

class Tracking < ActiveRecord::Base
  attr_accessible :element, :count

  def self.track(params)
    #your creation and counter update login
  end

end

and in your controller

def create
    Tracking.track(params)
    render :text => 'ok'
 end

HTH

cheers

sameera


Need Your Help

What is the limitation in the length of an SqlCommand query

.net sql-server sql-server-2005 sql-server-2008 sql-server-2000

Is there a limitation in the length of a query that SQL Server can handle?

web.config transform at deploy time not build

asp.net tfs msbuild msdeploy webdeploy

I'm wanting to know how to perform the following

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.