小编bdx*_*bdx的帖子

Rails有很多自我指涉

我有一个帐户模型如下(简化):

class Account < ActiveRecord::Base
    attr_accessible :account_number, :display_name, :master_account_id

    has_many :child_accounts, :class_name => "Account", :foreign_key => "id"
    belongs_to :master_account, :class_name => "Account", :foreign_key => "master_account_id"
end
Run Code Online (Sandbox Code Playgroud)

@account.master_account目前工作正常,但我也希望能够访问@account.child_accounts- 我需要做些什么才能解决这个问题?

associations ruby-on-rails-3

4
推荐指数
1
解决办法
4406
查看次数

Rails - CanCan HABTM关联检查

我的模型设置如下(联系人中的自我关联,因为我想为经销商存储的信息镜像该表中的所有字段,似乎与DRY保持一致以使用现有的数据结构):

class Contact < ActiveRecord::Base
  attr_accessible :reseller_id
  has_and_belongs_to_many :users
  has_many :reseller_clients, :class_name => "Contact", :foreign_key => "reseller_id"
  belongs_to :reseller, :class_name => "Contact"
end

class User < ActiveRecord::Base
  attr:accessible :name
  has_and_belongs_to_many :contacts
end
Run Code Online (Sandbox Code Playgroud)

使用cancan,我想拥有一个能够管理自己联系的经销商登录.用户和经销商之间的映射是HABTM,因此可以通过执行can :manage Contact, :users => {:id => user.id}以下操作来实现.

我还希望经销商登录能够在以下逻辑中管理与managed_accounts描述的集合匹配的所有Contact:

reseller_contacts = user.contacts
managed_accounts = []
reseller_contacts.each do |i|
  managed_accounts << i.reseller_clients
end
managed_accounts.flatten!
Run Code Online (Sandbox Code Playgroud)

我目前的能力课程有:

class Ability
  include CanCan::Ability
  def initialize(user)
    if user.role? :reseller
      # Allow resellers to manage their own Contact
      can :manage, Contact, :users => …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails cancan

4
推荐指数
1
解决办法
1897
查看次数

尽管sql_mode为空,但存储过程会引发“与sql_mode = only_full_group_by不兼容”

我有一个在MySQL 5.6上运行良好的存储过程。在最近的服务器迁移中,我们升级到MySQL 5.7.19。

我的存储过程现在抛出错误:

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'utility-monitor.daily_readings.building_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by: CALL monthly_readings(2017, 1, NULL, 1, 1))

我已经设置了sql_mode""通过/var/mysql/my.cnf文件,重新启动mysql服务,并通过控制台,以确认登录的sql_mode通过是空白SELECT @@sql_mode;

尽管如此,当我尝试运行存储过程时,我仍然收到上述错误。

接下来,我该怎么办才能继续排除错误的出处?

mysql mysql-5.7

4
推荐指数
1
解决办法
865
查看次数

在加载时(不是在初始化时)在类中的包含模块中执行代码

我正在做一个项目,其中多个类将包括MyModule. 在包含模块后,我希望包含模块的类将类类型的句柄推送到特定的类级数组。

我在下面尝试过的伪代码没有达到我想要的效果:

class Poly
  @@tracking = []
end

module MyModule
  def initialize(klass)
    Poly.tracking << self # Where `self` is the class, e.g. `MyClass1`, not an instance of the class.
  end
end

class MyClass1
  include MyModule
end

class MyClass2
  include MyModule
end
Run Code Online (Sandbox Code Playgroud)

加载后,我希望Poly.tracking等于[MyClass1, MyClass2].

ruby

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

如何在 Rails 5 迁移中为 MySQL 创建 UNSIGNED INT?

由于activerecord (< 5.0, >= 3.2)我能够使用activerecord-mysql-unsignedgem 在我的 MySQL 数据库中创建一个 UNSIGNED INT,但是该 gem 没有更新,而且我在 Rails 5 中找不到任何关于本机支持的文档。

是否有选项散列或可以在 add_column 方法中调用的东西,允许这样做?

mysql ruby-on-rails ruby-on-rails-5

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

Rails - 检查父对象是否被销毁并且正在调用依赖对象的销毁

我有以下内容:

class ModelA < ApplicationRecord
  has_many :model_bs, dependent: :destroy
end

class ModelB < ApplicationRecord
  belongs_to :model_a
  after_destroy :action_only_if_model_a_exists

  private

  def action_only_if_model_a_exists
    # Do things
  end
end
Run Code Online (Sandbox Code Playgroud)

当我调用 时model_a.destroy,我需要能够在action_only_if_model_a_existsModelB 的回调中确定关联的 ModelA 是否仍然存在或即将被销毁。

是否有一个很好的内置 Rails 方法可以做到这一点,或者我是否需要在早期的回调中在 ModelA 中设置一个标志(例如before_destroy),然后我可以在 ModelB 的回调中检查?

编辑

我已经做了多次测试并确认在action_only_if_model_a_exists回调中执行以下操作没有帮助:

> model_a.persisted?
true

> model_a.destroyed?
false

> model_a.frozen?
false
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails activemodel

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

哪个 ansible.cfg 超时值在 ansible-playbook 命令上被“-T”覆盖?

ansible -playbook 文档说 -T 将“以秒为单位覆盖连接超时(默认=10)”。

/etc/ansible/ansible.cfg文件的 部分下[persistent_connection],有connect_timeout (默认 30 秒)command_timeout (默认 10 秒)

ansible-playbook 文档表明 connect_timeout被覆盖,但页面指定的默认值与connect_timeout默认值不匹配,它与command_timeout默认值匹配。

那么,ansible-playbook 命令上的 -T 标志是否会覆盖connect_timeoutcommand_timeout或与其中任何一个都不相关的其他超时?

ansible

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

为什么我在二进制值和字符之间进行不一致的转换?

与arduino合作.我在一个过程中运行两次的函数中有以下代码:

int hours = 7;
char hour = hours+'0';
debug(&hour);
char hour2 = hours+'0';
debug(&hour2);
Run Code Online (Sandbox Code Playgroud)

debug功能是:

void debug(char message[]) {
  if (debugEnabled == true) {
    Serial.println(message);
  }
}
Run Code Online (Sandbox Code Playgroud)

全局debugEnabled标志初始化为true.

每次完整进程运行时,我都会得到以下输出(因此执行第一个代码块两次):

7 
7 
72 
7 
Run Code Online (Sandbox Code Playgroud)

在第二次写入第一个变量时,我看不到任何原因我在那里得到72,特别是因为hour2每次都正确打印变量.

任何关于可能出错的建议或如何进一步调试这一点都将非常感激.

c++ arduino

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