小编Pin*_*nyM的帖子

Rails:包括对一个关注点内的常数的关注

我关心的是我存储常量:

module Group::Constants
  extend ActiveSupport::Concern

  MEMBERSHIP_STATUSES = %w(accepted invited requested
    rejected_by_group rejected_group)
end
Run Code Online (Sandbox Code Playgroud)

我希望使用这些常量的另一个问题是:

module User::Groupable
  extend ActiveSupport::Concern
  include Group::Constants

  MEMBERSHIP_STATUSES.each do |status_name|
    define_method "#{status_name}_groups" do
      groups.where(:user_memberships => {:status => status_name})
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

不幸的是,这会导致路由错误:

uninitialized constant User::Groupable::MEMBERSHIP_STATUSES
Run Code Online (Sandbox Code Playgroud)

看起来第一个问题是在第二个问题中没有正确加载.如果是这样的话,我该怎么办呢?

ruby-on-rails separation-of-concerns

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

获取工厂内的两个关联以共享另一个关联

我有这5个模型:卫报,学生,关系,关系类型和学校.在他们之间,我有这些联想

class Guardian < ActiveRecord::Base
  belongs_to :school
  has_many :relationships, :dependent => :destroy
  has_many :students, :through => :relationships
end

class Student < ActiveRecord::Base
  belongs_to :school
  has_many :relationships, :dependent => :destroy
  has_many :guardians, :through => :relationships
end

class Relationship < ActiveRecord::Base
  belongs_to :student
  belongs_to :guardian
  belongs_to :relationship_type
end

class School < ActiveRecord::Base
  has_many :guardians, :dependent => :destroy
  has_many :students, :dependent => :destroy
end

class RelationshipType < ActiveRecord::Base
  has_many :relationships
end
Run Code Online (Sandbox Code Playgroud)

我想写一个定义关系的FactoryGirl.每个关系都必须有一个监护人和一个学生.这两个人必须属于同一所学校.监护人工厂与学校有联系,学生工厂也是如此.我一直无法让他们在同一所学校建造.我有以下代码:

FactoryGirl.define do

  factory :relationship do
    association :guardian
    association :student, :school => …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails factory-bot

19
推荐指数
2
解决办法
3641
查看次数

在Ruby中,tLABEL到底意味着什么?

当我得到它时,我通常会忽略这个错误并修复导致它的语法错误,但出于好奇,tLABEL在意外的tLABEL中究竟是什么意思?

我试过寻找答案,但只是让很多人试图帮助他们解决错误.

我也发现了这个定义:

tlabel是一个非窗口的VCL控件,它在窗体上显示不可编辑的文本.它在StdCtrls.pas单元中定义.

但我不认为这是一个非常容易理解的定义.

ruby tlabel

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

浏览器误解了URL中的'&not'

显然,如果包含文本的URL &not被用作字段属性的一部分,许多浏览器会将其解释为"¬".所以这个HTML代码:

<a href="#" onclick="window.location='http://www.example.com?some_param=1&notify=true';">Click here</a>
Run Code Online (Sandbox Code Playgroud)

将呈现为:

<a href="#" onclick="window.location='http://www.example.com?some_param=1¬ify=true';">Click here</a>
Run Code Online (Sandbox Code Playgroud)

我发现一对夫妇的替代品替代&not&%6Eot,或通过发布形式,而不是得到一个参数化URL.但职位是并不总是一个受欢迎的选择和替代是大家公认的黑客-它也将需要处理与其他常见标记为&cent,&curren,&pound,&sect,&copy,&reg...(摘自列表在这里).

当然有人有更好的解决方案吗?

html browser html-parsing

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

如何找出拦截'method_missing'的内容

使用Ruby 1.8.6/Rails 2.3.2

我注意到在我的任何ActiveRecord模型类上调用的任何方法都返回nil而不是NoMethodError.除了恼人的,这是打破了动态查找器(find_by_name,find_by_id,等),因为他们总是返回nil即使记录存在.不从ActiveRecord :: Base派生的标准类不受影响.

有没有办法在ActiveRecord :: Base之前跟踪什么是拦截method_missing?

更新:

切换到1.8.7后,我发现(感谢@MichaelKohl)will_paginate插件首先处理method_missing.但是will_paginate在我们的系统中已经存在了很长一段时间(并且没有改变),罪魁祸首必须是后来的链接.任何想法如何看到这个链中的下一步?

更新:

事实证明,有一个gem(annotate-2.4.0)是猴子修补ActiveRecord::Base#method_missing作为一个空白的方法.卸载gem解决了我的问题.虽然没有给出的答案实际上找到了问题,但@Yanhao的答案最接近,因为它只需要一个小调整来发现有问题的别名方法

ruby ruby-on-rails

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

动态where子句基于变量

我正在使用SQL中的select语句,并且遇到了尝试创建包含case语句或if else语句的where子句的问题.我想根据变量的值选择记录.如果变量为"True",则仅返回列为null的select语句中的记录.如果变量不是"True",则返回所有记录,无论该列是否为空.

关于如何做到这一点的任何提示?

以下是我想要做的一个简单示例:

declare @option1 as varchar(5)

--This can be True or False so to test i just put the Set option below
set @option1 = 'True'

Select a,b,c,d...
from ...
where d = case when @option1 = 'True' then NULL End
Run Code Online (Sandbox Code Playgroud)

这是我不知道该怎么做的部分.如果变量为"True",我只需要过滤掉记录,因此不确定在案例的else部分放置什么.

sql t-sql

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

where子句中的CASE语句使用等于和IN

WHERE CONDITION1='ABC'
AND Status =
    CASE  @Option 
            WHEN 1 THEN 'True'
            WHEN 2 THEN 'False'
            WHEN 3 THEN  NULL
            WHEn 4 THEN **IN ('True', 'False', NULL)**
    END
Run Code Online (Sandbox Code Playgroud)

如何编写查询,我的第一个选项直接匹配,= 但我的最后一个选项需要一个IN

上面的查询给出了错误,但我想要类似的东西,我无法找到.

sql case-statement in-clause sql-server-2008

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

基于日期的 SQL 排名

我试图根据过去 18 个月内的访问次数将客户与“首选”商家联系起来,决胜局是最近的访问日期。我在决胜局方面遇到了一些麻烦。如果有两条记录根据某个 MemberID 的访问次数均排名第 1,我想将该 MemberID 的记录上的 IsFirst 位列设置为 1。我该怎么做呢?

sql rank sql-server-2008-r2

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