Ruby on rails Rails mysql更新
我是RubyonRails的新手,我来自PHP,我意识到这不仅仅是简单的语法,还有很多很好的结构实践 虽然我现在做的很有效,但我几乎可以肯定我没有用最好的方式来做 这是我正在做的。我通过AJAX跟踪点击,并更新数据库中的记录,以监控流行的访问点 这是我的控制器:Ruby on rails Rails mysql更新,ruby-on-rails,ruby,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby,Ruby On Rails 3,Activerecord,我是RubyonRails的新手,我来自PHP,我意识到这不仅仅是简单的语法,还有很多很好的结构实践 虽然我现在做的很有效,但我几乎可以肯定我没有用最好的方式来做 这是我正在做的。我通过AJAX跟踪点击,并更新数据库中的记录,以监控流行的访问点 这是我的控制器: class AjaxController < ApplicationController def track elem = Tracking.where('element = ?', params[:elem
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
如果有什么东西可以重构,有人能给我指引正确的方向吗?您的控制器可以从RESTful设计中受益。让您的控制器与资源一起工作——AjaxController不是这样的例子 通过将
no_access
移动到ApplicationController
并添加以获得授权来干燥代码
您的模型很好,不过您可能需要验证。并在模式中指定NOTNULL
最后,继续阅读其他人的代码。继续编写自己的代码。您的控制器可以从一些RESTful设计中受益。让您的控制器与资源一起工作——AjaxController不是这样的例子 通过将
no_access
移动到ApplicationController
并添加以获得授权来干燥代码
您的模型很好,不过您可能需要验证。并在模式中指定NOTNULL
最后,继续阅读其他人的代码。继续编写自己的代码。而且你会及时变得更好。我会看到一些关于Rails转换的重新分解。但如果你有任何具体的原因,这些都可能被夸大 1-您的型号名称(我认为您答对了,只需再次检查表名) 理想情况下,Rails的表格为复数形式,模型为单数形式。因此,您的表应该是
跟踪
,您的模型应该是跟踪
2-控制器
由于您是指您的跟踪模型,按照惯例,控制器名称应为trackingcontroller
Rails使用REST方法,因此请尽量保持默认的7个控制器操作(只要它们在上下文中有意义)。默认的REST控制器操作是
index
show
new
create
edit
update
destroy
因此,我认为您的点击可以匹配为Trackings->create
而且可能没有任何访问方法可以移动到ApplicationController,因为它可以被任何控制器使用
程序逻辑
通常我们不会在控制器中写入域登录,所以您的以下部分在控制器中
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
def create
Tracking.track(params)
render :text => 'ok'
end
可以移动到类似的模型
class Tracking < ActiveRecord::Base
attr_accessible :element, :count
def self.track(params)
#your creation and counter update login
end
end
我会看到一些关于Rails转换的重新分解。但如果你有任何具体的原因,这些都可能被夸大 1-您的型号名称(我认为您答对了,只需再次检查表名) 理想情况下,Rails的表格为复数形式,模型为单数形式。因此,您的表应该是
跟踪
,您的模型应该是跟踪
2-控制器
由于您是指您的跟踪模型,按照惯例,控制器名称应为trackingcontroller
Rails使用REST方法,因此请尽量保持默认的7个控制器操作(只要它们在上下文中有意义)。默认的REST控制器操作是
index
show
new
create
edit
update
destroy
因此,我认为您的点击可以匹配为Trackings->create
而且可能没有任何访问方法可以移动到ApplicationController,因为它可以被任何控制器使用
程序逻辑
通常我们不会在控制器中写入域登录,所以您的以下部分在控制器中
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
def create
Tracking.track(params)
render :text => 'ok'
end
可以移动到类似的模型
class Tracking < ActiveRecord::Base
attr_accessible :element, :count
def self.track(params)
#your creation and counter update login
end
end
除了sameera207所说的之外,您还可以使用
find\u或\u create\u
方法缩短查找或创建记录的过程:
Tracking.find_or_create_by_element(params[:element])
编辑
您可以使用以下方法处理递增的值:
tracking = Tracking.find_or_create_by_element(params[:element]) do |t|
t.count = 1
end
tracking.count += 1
tracking.save
除了sameera207所说的之外,您还可以使用
find\u或\u create\u
方法缩短查找或创建记录的过程:
Tracking.find_or_create_by_element(params[:element])
编辑
您可以使用以下方法处理递增的值:
tracking = Tracking.find_or_create_by_element(params[:element]) do |t|
t.count = 1
end
tracking.count += 1
tracking.save
我读到了,问题是如果它存在,我会增加计数。我读到了,问题是如果它存在,我会增加计数。