我正在使用simple_form gem来创建Rails表单. http://github.com/plataformatec/simple_form
一切都很好,除了如何创建分组选择框?无法在文档中或谷歌搜索中找到它.
刚遇到has_many问题:通过关联和after/before-destroy回调没有被触发.
说,我有用户,组和称为成员资格的中间关系.我有一个表单,允许用户通过在关闭相关复选框时创建新的成员资格记录来注册成组.基本上是一组group_id.
看起来像这样:
Which group would you like to join? (check all that apply)
[] Group A
[] Group B
[] Group C
我希望记录一些操作,例如加入一个小组或将一个小组留在活动日志表中,并做一些其他不太重要的问题.
我有以下定义:
class Group < AR::Base
  has_many :memberships
  has_many :users, :through => :memberships
end
class Membership < AR::Base
  belongs_to :user
  belongs_to :group
  after_create :log_event_to_audit_table
  after_destroy :log_event_to_audit_table
end
class User < ActiveRecord::Base
  has_many :memberships
  has_many :groups, :through => :memberships
  attr_accessible :group_ids   # enables mass-assignment
end
创建新的成员资格记录时,after_create按预期运行.但是,after_destroy不会被触发!
在谷歌阅读并阅读文档后,我发现了原因:
"自动删除连接模型是直接的,没有触发销毁回调" - 来自Ruby Guides.
Hmmmmmm ...
因此,不会触发连接模型(在这种情况下为Membership)的销毁回调.嗯,这是一个下降.有什么理由为什么?
所以我的问题是解决这个问题的最佳方法是什么?我应该在User模型中定义我自己的membership_ed =方法直接调用membership.destroy吗?
对这种情况下的最佳实践提出任何建议.
谢谢!
使用mod_passenger维护部署在Apache上的Rails v2.3.8应用程序.
我需要访问其中一个模型中的当前用户会话(准确地说是Auditor观察者).我知道这打破了MVC的原则.但我必须违反它,因为我有一个需要知道当前登录用户的观察者.我有很多控制器,并且调用Auditor记录器不会很干.
我只是想在返回当前登录的用户会话时调用User.current.但是我遇到了缓存/线程安全的问题.原作者使用类变量(@@ current)来存储当前用户.但这不是线程安全的,所以我把它变成了这个
class User < AR:Base
  ...
  def self.current
    Thread.current[:user]
  end
  def self.current=(user)
    Thread.current[:user] = user
  end
  ...
end
所以它应该是线程安全的.在Auditor观察员中,我有一个电话:
Auditor(subject, action, object)
我在User.current中传递的主题.
这段代码在开发中很有用,但在制作中我从User.current获得了不正确的值.有时我得到另一个登录用户的记录而不是当前记录.所以仍然存在一些线程安全/类缓存问题,但我无法弄清楚如何修复它.
有什么建议?谢谢
假设有两个(或多个)RESTful微服务提供JSON。服务(A)存储用户信息(名称,登录名,密码等),服务(B)存储去往/来自该用户的消息(例如sender_id,主题,正文,rcpt_ids)。
服务(A)/profile/{user_id}可能会回应:
{id: 1, name:'Bob'}
{id: 2, name:'Alice'}
{id: 3, name:'Sue'}
等等
响应的服务(B)/user/{user_id}/messages返回发往该{user_id}的消息列表,如下所示:
{id: 1, subj:'Hey', body:'Lorem ipsum', sender_id: 2, rcpt_ids: [1,3]},
{id: 2, subj:'Test', body:'blah blah', sender_id: 3, rcpt_ids: [1]}
使用这些服务的客户端应用程序如何处理将消息列表放在一起以显示名称而不是发件人/ rcpt id的情况?
方法1:提取消息列表,然后开始为sender_id和中列出的每个ID提取配置文件信息rcpt_ids。这可能需要100的请求,可能需要一段时间。相当幼稚和低效,可能无法与复杂的应用程序一起扩展???
方法2:拉出消息列表,提取所有用户ID,并分别对所有相关用户发出批量请求……这假定存在这样的服务端点。在获取消息列表,提取用户ID,发送对批量用户信息的请求以及等待批量用户信息响应之间仍然存在延迟。
理想情况下,我想一次性提供完整的响应集(消息和用户信息)。我的研究将我带到服务层的响应合并...又名方法3:API网关技术。
但是如何实现呢?
我可以获取消息列表,提取用户ID,在后台进行调用并获取用户数据,合并结果集,然后将最终结果提供...在后台进行2种服务都可以正常工作...但是如果消息列表取决于更多服务...如果我需要在后台查询多个服务,进一步解析这些响应,基于次要(三次)结果查询更多服务,然后最终合并...该怎么办?疯狂停止?这如何影响响应时间?
现在,我已经有效地创建了另一个“客户端”,该客户端将所有微服务响应组合为一个大型响应……与上面的方法1没什么不同……除了在服务器级别。
在“现实世界”中是这样吗?有什么见解吗?我可以检查基于此类API网关体系结构构建的任何开源项目吗?
我正在为朋友的心理调查项目创建一个简单的Ruby on Rails调查应用程序.所以我们有调查,每个调查都有一堆问题,每个问题都有参与者可以选择的选项之一.没什么好激动的.
其中一个有趣的方面是每个答案选项都有一个与之相关的分数值.因此,对于每个调查,需要根据这些值计算总分.
现在我的想法是代替硬编码计算,允许用户添加一个公式,通过该公式计算总调查分数.示例公式:
"Q1 + Q2 + Q3"
"(Q1 + Q2 + Q3) / 3"
"(10 - Q1) + Q2 + (Q3 * 2)"
所以只是基本的数学(为了清晰起见,附加一些括号).我们的想法是保持公式非常简单,这样任何拥有基本数学的人都可以输入它们,而无需解析某些奇特的语法.
我的想法是采用任何给定的公式,并用基于参与者选择的分数值替换Q1,Q2等占位符.然后eval()新形成的字符串.像这样的东西:
f = "(Q1 + Q2 + Q3) / 2"  # some crazy formula for this survey
values = {:Q1 => 1, :Q2 => 2, :Q3 => 2}  # values for substitution 
result = f.gsub(/(Q\d+)/) {|m| values[$1.to_sym] }   # string to be eval()-ed
eval(result)
所以我的问题是:
有一个更好的方法吗?我愿意接受任何建议.
如何处理并非所有占位符都被成功替换的公式(例如,一个问题没有得到解答)?例如:{:Q2 => 2}不是值哈希?我的想法是拯救eval(),但在这种情况下它不会失败因为coz   (1 + …
activerecord ×1
api-design ×1
api-gateway ×1
eval ×1
forms ×1
parameters ×1
parsing ×1
rest ×1
ruby ×1
select ×1
session ×1
simple-form ×1