Tag: activerecord

Rails 4 x paper_trail:使用嵌套资源按item_id过滤版本

在我的Rails 4应用程序中,我有以下模型: class User < ActiveRecord::Base has_many :administrations, dependent: :destroy has_many :calendars, through: :administrations end class Administration < ActiveRecord::Base belongs_to :user belongs_to :calendar end class Calendar < ActiveRecord::Base has_many :administrations, dependent: :destroy has_many :users, through: :administrations end class Post < ActiveRecord::Base belongs_to :calendar end 我安装了paper_trail gem来跟踪我的post模型的变化,如文档中所述 ,它就像一个魅力。 版本显示在Calendars#Index视图中,该视图用作user的仪表板。 以下是我的CalendarsController的设置方法: def index @user = current_user @calendars […]

rails:在表单中编辑序列化数据

我有一个模型有一个序列化哈希的参数。 我希望能够使用内置的railsfunction在表单中编辑哈希。 它几乎正常工作。 如果填写表格并提交,则参数序列化正确,并且在控制器中,模型使用预期值构建。 它崩溃的地方是我希望表单显示现有模型:表单字段中没有显示任何值。 我的模型看起来像: class Search < ActiveRecord::Base serialize :params end forms: 10, :placeholder => “Min” %> 10, :placeholder => “Max” %> … 并在控制器的创建方法: @search = Search.new(params[:search]) @search.params ||= Hash.new logger.info(“search = #{@search.inspect}”) 在日志中: search = #”1200″, “max_square_footage”=>”1500”}, created_at: nil, updated_at: nil> 所以你可以看到值被POST。 在我看来,在表单上方,我添加了这一行,看看我是否至少可以访问这些值: 我可以。 因此,如果我可以访问我的视图中的值,并且表单成功将数据POST到我的控制器,为什么我的表单不能显示数据?

ActiveRecord在一个表上不起作用

我有一个Rails模型: ruby-1.9.2-p0 > NavItem => NavItem(id: integer, item_identifier: string, description: string, description2: string, packing_unit: string, sales_unit_of_measure: string, ean_code: string, evp_price: string, item_category_code: string, class: string, product_group_code: string, maintenance_status: string) 如果我想创建一条记录: ruby-1.9.2-p0 > NavItem.create NoMethodError: undefined method `has_key?’ for nil:NilClass from /Users/amueller/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.0/lib/active_support/whiny_nil.rb:48:in `method_missing’ from /Users/amueller/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0/lib/active_record/attribute_methods/read.rb:69:in `class’ from /Users/amueller/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0/lib/active_record/persistence.rb:285:in `attributes_from_column_definition’ from /Users/amueller/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0/lib/active_record/locking/optimistic.rb:62:in `attributes_from_column_definition’ from /Users/amueller/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0/lib/active_record/base.rb:1396:in `initialize’ from […]

Rails will_paginate在HABTM模型上显示重复项

我正在使用will_paginate与博客post和标签之间的HABTM关系。 每当我应用分页时,我都会显示重复的post,因为Rails中的HABTM不会保持数据库的唯一性,它会在进行查询时应用唯一性。 blog_posts.rb has_and_belongs_to_many :tags, :uniq => true tag.rb has_and_belongs_to_many :blog_posts, :uniq => true 根据ActiveRecord的文档 ,:uniq不会阻止存储重复的关系,它只是在构建查询时忽略它们。 这是问题: tag = Tag.find(1) tag.blog_posts.count等于1,但是: tag.blog_posts.page(nil).count等于3,并且所有3都是同一post的重复。 正确的行为应该只显示1,而不是重复。 我知道我可以复制这里生成的SQL查询并以这种方式修复它,但这似乎不是一个好的解决方案。 有人可以帮我解决潜在的问题吗? (虽然我担心这是will_paginate中的一个错误) 编辑:这似乎也是Kaminari的一个问题。

更好的方法来访问单个Rails ActiveRecord错误?

我正在尝试访问ActiveRecord :: Error对象的type属性。 我这样做的原因是因为我想根据失败的validation类型将用户重定向到不同的页面(属性可能在几个方面失败validation,因此属性本身不足)。 我发现我能做到这一点的唯一方法是: obj.errors.instance_variable_get(:@errors)[“attr”][0].type 这简直太讨厌了。 有没有更好的办法?

Rails ActiveRecord查找属性不是给定值的子节点

鉴于Parent有很多具有status_id属性的Child ,我想找到所有没有status_id:1 。 换句话说, status_id可以是nil或不同的值。 但我看到一些有趣的行为: Parent.find(1).childs.where(status_id:nil) => #<ActiveRecord::AssociationRelation [#] Parent.find(1).childs.where.not(status_id:1) => #

Validates_Overlap Gem多个范围覆盖彼此

我正在使用Validates_Overlap Gem,可以在这里找到: https : //github.com/robinbortlik/validates_overlap 实质是我有两个房间可以预订。 我希望validation在同一房间已经在SAME房间进行确认预订时介入。 如果预订了其他房间,或者预订了相同的房间但尚未确认,则不应该给我一个错误。 到目前为止,我的代码如下 validates :start_time, :end_time, :overlap => { :exclude_edges => [“starts_at”, “ends_at”], :scope => { “bookings.studio_id” => proc {|booking| booking.studio_id}} && { “bookings.is_confirmed” => proc {|booking| booking.is_confirmed == true}} }, on: :update 这将从我的服务器返回以下内容: Booking Exists (0.4ms) SELECT 1 AS one FROM “bookings” WHERE ((bookings.end_time IS NULL OR bookings.end_time […]

订单条款中的问题和活动记录中的限制

我正在触发此查询 p “my query starts here…” @relevant_customers_for_total_spent = Customer.order(“total_amount DESC”).where(‘id IN (?)’,@customers_ids).limit(relevant_customers_count_for_total_spent) p ” ——- ” p relevant_customers_count_for_total_spent # output is: 1139 p @relevant_customers_for_total_spent.count # output is: 2888 p ” ——- ” 更多的日志是说实际的查询是: SELECT COUNT(*) FROM `customers` WHERE (id IN (2,3,4,5,6,75,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,75,296,297,298,2889)) LIMIT 1139 所以问题是: 为什么实际查询中没有order子句? 为什么@ relevant_customers_for_total_spent.count大于relevant_customers_count_for_total_spent。 它应该等于或小于。 * 更新-1 * 我得到了第二个问题: @relevant_customers_for_total_spent.length 是计算元素数量的正确方法。 更新 […]

Rails 4 ActiveRecord。其中一个数组中的任何元素都在另一个数组中

我有一个看起来像这样的ID列表: feed_ids = [1,2,3,4,5] # will be filled with random ids 我有一个Post模型,其属性parent_ids可能如下所示: parent_ids = [20,14,1] 我想检索parent_ids中的元素与feed_ids中的元素匹配的所有记录 我试过这个,但它不起作用: nodes = Post.where(parent_ids: feed_ids) 它没有给我一个错误,但它也没有返回任何记录。

Unicorn和Rails占用了2倍的MySQL连接

我为每个服务器运行10个Unicorn工作程序,他们随着时间的推移吃掉所有MySQL连接,结果是“连接太多”错误。 它从10个连接开始,但逐渐增加到20个。 当我在生产中运行以下脚本时(使用SHOW PROCESSLIST ),我可以看到每个IP(= app服务器)每个都有20个连接,它应该是10 – 令Unicorn工作者的数量增加了两倍。 result = ActiveRecord::Base.connection.execute ‘show processlist’ result.group_by{|i| i[2].split(‘:’).first }.map{|k,v| [k, v.size] } => [[“192.168.1.2”, 20], [“192.168.1.3”, 20], [“192.168.1.4”, 20], … ] 这是database.yml production: adapter: mysql2 … pool: 1 这是netstat: # netstat -an | grep :3306 tcp 0 0 192.168.1.2:58535 192.168.1.123:3306 ESTABLISHED tcp 0 0 192.168.1.2:45021 192.168.1.123:3306 ESTABLISHED tcp […]