小编Fiv*_*ell的帖子

Rails审计系统包含ActiveResource和ActiveRecord

我有一个包含ActiveRecord和ActiveResource模型的庞大项目.我需要使用这些模型实现用户活动的记录,并记录模型属性的更改(保存对象状态或类似的东西).用户或cron rake任务可以进行更改.

我也必须有可能按日期搜索任何数据,任何字段..等等

例如,用最后一个活动生成可读消息也会很好

  • 用户Bob将密码更改为*,并在2011-08-12 08:12 发送电子邮件至**
  • 员工Jeff在2011-08-12 08:13添加了新合作伙伴:公司名称
  • Admin Jack删除了产品:产品名称于2011-09-12 11:11
  • 客户Sam订购了新服务:服务名称于2011-09-12 11:12

有人实施这样的记录吗?想法?建议?

我应该使用宝石还是我可以通过观察者不改变模型来做所有逻辑?


我喜欢gem https://github.com/airblade/paper_trail任何人都可以说我怎样才能让它与activeresource一起工作?

ruby logging auditing observer-pattern ruby-on-rails-3

17
推荐指数
1
解决办法
3286
查看次数

在活动管理员中显示错误消息有多个关系表

我正面临一个问题,显示活动管理员中的错误消息.

我收到与表单中的字段一起显示的所有错误消息.但是在下面的代码中,我需要添加至少一项技能和最多5项技能.否则需要抛出错误消息.

我在模型中添加了一个验证:

验证:技能,:length => {:minimum => 1,:maximum => 5,:message =>"应至少为1且小于5"}

这完全验证,但不显示任何错误消息.

任何人都可以帮我显示错误消息.

以下是代码:

form :html => { :enctype => "multipart/form-data" } do |f|

    f.inputs "User", :multipart => true do

        f.input :name
        f.input :email,  :as => :email
        f.input :profile_name
        f.input :date_of_birth
        f.input :gender,  :as => :select, :collection => Gender::GENDERS
      end
      f.inputs "Skills* ( minimum 1 & maximum 5 )" do
        f.has_many :skills do |p|
          if !p.object.nil?
            # show the destroy checkbox only if it is an existing appointment
            # else, …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails activeadmin

17
推荐指数
1
解决办法
1万
查看次数

ActiveRecord Association选择包含记录的计数

class User  
  has_many :tickets 
end
Run Code Online (Sandbox Code Playgroud)

我想创建包含用户计数票据逻辑的关联,并在包含中使用它(用户has_one ticket_count)

Users.includes(:tickets_count)
Run Code Online (Sandbox Code Playgroud)

我试过了

  has_one :tickets_count, :select => "COUNT(*) as tickets_count,tickets.user_id " ,:class_name => 'Ticket', :group => "tickets.user_id", :readonly => true  

User.includes(:tickets_count)

 ArgumentError: Unknown key: group
Run Code Online (Sandbox Code Playgroud)

在这种情况下,include中的关联查询应该使用count with group by ...如何使用rails实现这一点?

更新

  • 我不能改变表结构
  • 我希望AR为包含的用户集合生成1个查询

UPDATE2

我知道SQL,我知道如何用连接选择它,但我的问题现在就像"如何获取数据".我的问题是关于建立我可以在包含中使用的关联.谢谢

Update3 我尝试创建像用户has_one ticket_count创建的关联,但是

  1. 看起来像has_one不支持关联扩展
  2. has_one不支持:组选项
  3. has_one不支持finder_sql

ruby activerecord ruby-on-rails active-relation ruby-on-rails-3

15
推荐指数
3
解决办法
1万
查看次数

Rake:记录任何正在执行的任务

如何在不更改任务源的情况下为每个rake任务创建数据库日志记录?我需要存储日期时间,任务名称,参数.是否有某种观察者等?

ruby rake logging ruby-on-rails

12
推荐指数
1
解决办法
3677
查看次数

rails activesupport通知 - 错误的db运行时值

我正在尝试记录我的REST API应用程序的请求.我正在使用rails通知,例如http://railscasts.com/episodes/249-notifications-in-rails-3

我无法理解如何解决rails通知的一个问题.

我的初始化代码

ActiveSupport::Notifications.subscribe "process_action.action_controller" do |name, start, finish, id, payload|
 p name
 p start 
 p finish
 p id
 p payload
end



Controller respond section

    class PostsController < ApplicationController
      # GET /posts
      # GET /posts.json

      respond_to  :json, :html
     ....
end
Run Code Online (Sandbox Code Playgroud)

控制器创建动作

  def create
    @post = Post.new(params[:post])
    @post.save!
    respond_with(@post, :location => nil)
 end
Run Code Online (Sandbox Code Playgroud)

控制台输出

"process_action.action_controller"
2013-02-02 20:13:11 +0200
2013-02-02 20:13:11 +0200
"951b8999e9b71d4a8949"
{:controller=>"PostsController", :action=>"create", :params=>{"utf8"=>"?", "authenticity_token"=>"1WugY9gh6ZCRXjfBTuckye3c9XDvtCqMQ2JdBpCo88s=", "post"=>{"name"=>"post3", "title"=>"post3", "content"=>"post3"}, "commit"=>"Create Post", "action"=>"create", "controller"=>"posts"}, :format=>:html, :method=>"POST", :path=>"/posts", :status=>302, :view_runtime=>nil, :db_runtime=>0} …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails activesupport ruby-on-rails-3 ruby-on-rails-3.2

11
推荐指数
1
解决办法
1086
查看次数

ruby self.class.class_eval或singleton_class.class_eval

我这样做有什么不同

class T

  def initialize
   self.class.class_eval do
      def test
        return self.class.object_id
     end
   end
  end

end
Run Code Online (Sandbox Code Playgroud)

class T

  def initialize
    singleton_class.class_eval do
      def test
        return self.class.object_id
     end
   end
  end

end
Run Code Online (Sandbox Code Playgroud)

谢谢

PS.Tass回答说,在这个例子中,singleton_class将为每个新对象返回一个不同的object_id,因为singleton_class只属于一个Object.但IRB接下来会说明

1.9.2p180 :001 > class T
1.9.2p180 :002?>   
1.9.2p180 :003 >     def initialize
1.9.2p180 :004?>      singleton_class.class_eval do
1.9.2p180 :005 >               def test
1.9.2p180 :006?>                 return self.class.object_id
1.9.2p180 :007?>              end
1.9.2p180 :008?>        end
1.9.2p180 :009?>     end
1.9.2p180 :010?>   
1.9.2p180 :011 >     end
 => nil 
1.9.2p180 :012 > t = T.new …
Run Code Online (Sandbox Code Playgroud)

ruby metaprogramming ruby-1.9

10
推荐指数
2
解决办法
2504
查看次数

rake检查是否已经运行

是否有可能以某种方式执行rake任务只有它还没有运行,我想使用cron执行一些rake任务但是rake任务不应该在前一次调用未完成时启动谢谢

ruby rake ruby-on-rails rake-task ruby-on-rails-3

9
推荐指数
3
解决办法
3251
查看次数

虚拟属性和批量分配

开发商!我无法理解下一个情况

例如,我有模型

class Pg::City < ActiveRecord::Base
   belongs_to :country  
   #virtual accessors
   attr_accessor :population
   #attr_accessible :city, :isdisabled,  :country_id

end
Run Code Online (Sandbox Code Playgroud)

我可以使用这样的代码:

c = Pg::City.new({:population=>1000})
puts c.population
1000
Run Code Online (Sandbox Code Playgroud)

但是,如果我取消注释上面的attr_accessible代码抛出警告

WARNING: Can't mass-assign protected attributes: population
Run Code Online (Sandbox Code Playgroud)

如何将虚拟属性与模型属性一起用于质量分配?谢谢!

ruby activerecord ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

8
推荐指数
1
解决办法
3591
查看次数

使用ajax选择2个默认选项

我有下一个HTML结构

<select class="change_item_dropdown_ajax form-control" id="item_id" name="item_id" onchange="updateData(this, this.value, 16)" >
<optgroup label="System Data">
  <option value="17">Test</option>
  <option selected="selected" value="18">System</option>
</optgroup>
</select>
Run Code Online (Sandbox Code Playgroud)

使用Javascript

 $(".change_item_dropdown_ajax").select2({
        ajax: {
            url: "get_user_items",
            dataType: 'json',
            delay: 250,
            theme: "classic",
            data: function (params) {
                return {
                    q: { name_contains: params.term } // search term
                };
            },
            processResults: function (data) {
                return {
                    results: data
                };
            },
            cache: true
        },
        allowClear: true,
        placeholder: '--- Please select item ---',
        minimumInputLength: 1
    });
Run Code Online (Sandbox Code Playgroud)

我想让客户看到一些带有项目的默认系统选项<optgroup label="System Data">,但也增加了通过自己的项目进行搜索ajax查询的能力.

但是在绑定select2后它没有显示<optgroup label="System …

jquery-select2 jquery-select2-4

8
推荐指数
1
解决办法
3341
查看次数

rails路由嵌套资源

我有下一个资源

 resources :countries do
    resources :cities
 end    

 resources :cities do
    resources :streets
 end
Run Code Online (Sandbox Code Playgroud)

它会产生下一条路线

GET    /countries/:country_id/cities(.:format)                          cities#index
POST   /countries/:country_id/cities(.:format)                          cities#create
new_country_city GET    /countries/:country_id/cities/new(.:format)                      cities#new
edit_country_city GET    /countries/:country_id/cities/:id/edit(.:format)                 cities#edit
GET    /countries/:country_id/cities/:id(.:format)                      cities#show
PUT    /countries/:country_id/cities/:id(.:format)                      cities#update
DELETE /countries/:country_id/cities/:id(.:format)                      cities#destroy


......
cities GET    /cities(.:format)                                                cities#index
POST   /cities(.:format)                                                cities#create
new_city GET    /cities/new(.:format)                                            cities#new
edit_city GET    /cities/:id/edit(.:format)                                       cities#edit
city GET    /cities/:id(.:format)                                            cities#show
PUT    /cities/:id(.:format)                                            cities#update
DELETE /cities/:id(.:format)                                            cities#destroy
Run Code Online (Sandbox Code Playgroud)

我不希望访问城市可以没有国家ID但我也不想使用3级嵌套资源,所以我可以改变下一个路线

 resources :countries do
        resources :cities
     end    

     resources :cities, :except => [:index, :destroy, :edit, :show, :create, :new, …
Run Code Online (Sandbox Code Playgroud)

routes ruby-on-rails url-routing ruby-on-rails-3

7
推荐指数
1
解决办法
2378
查看次数