小编Joh*_*tta的帖子

如何在Rails中自动链接到文本提交中的对象

所以,你在Github提交了一个问题,你提到的问题是#31.然后,在写这个问题时,你注意到@johnmetta已经提出了他正在研究的一些可能的解决方案.然后你点击"提交新问题",当你这样做时,"#31"和"@johnmetta"是链接,并且@johnmetta已被通知,问题#31有一个通知它已被引用.

我意识到这里有不止一种技术(Javascript好东西等),但我正在寻找的是如何在Rails世界中做这类事情的一些例子.这是一个有趣的搜索难题.

我从概念上提出的是:

  1. 有一些标识符,例如保留的#或@
  2. 提交后,在适当的属性中搜索该标识符
  3. 找到它后,使用与后面匹配的字段搜索相应的模型
  4. 找到后,用链接替换该文本字符串
  5. (可选)执行必要的操作以通知引用的对象

也就是说,它似乎非常简单(明确编码,假设为friendly_id).

def prettify_user_links(str, source):
  result = str
  str.scan(/(@\S+)+/).each do |mtch|
    # Strip off whatever identifier we're using
    search_string = mtch[0].gsub('@','')
    # Search for the matching model in the appropriate table
    user = User.find(search_string)
    if user
      # If we find a matching model, create some link text and link it
      link_txt = "<a href=>'#{user.url}'>#{mtch}</a>"
      result.gsub!(search_string, link_txt)
      # Notification. Not sure how/where, maybe with a message bus, or something more brute-force like …
Run Code Online (Sandbox Code Playgroud)

ruby search ruby-on-rails

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

Ruby 1.9.2中机架级的SystemStackError,而不是1.8.7

我被引入遗留代码库,将其从Rails 2.4/Ruby 1.8.7升级到Rails 3.1/Ruby 1.9.2.在这样做的过程中,我发现了一个非常有趣的问题,需要花费3天才能弄明白.我想把它放在这里,为其他人看到问题给它一些谷歌汁液,并提出问题:为什么?

基本上,我SystemStackError在运行我的应用程序时看到了Rack级别.在错误发生之前我无法获得任何请求,并且因为我的代码从未被触及而无法调试它.在开发模式中,我可以看到很多站点,然后突然得到SystemStackError数据库被击中的时间.所以我认为这是一种懒惰加载.

切换到生产模式,第一个请求发生异常.服务器正常启动,但没有请求通过,我的代码没有被触及.

快进太多小时,我跟踪回溯到Rails中的循环(完整要点):

/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/action_dispatch/routing/url_for.rb:102:in `initialize' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/action_controller/metal.rb:140:in `initialize' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/abstract_controller/rendering.rb:74:in `initialize' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/abstract_controller/layouts.rb:301:in `initialize' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/action_dispatch/routing/url_for.rb:103:in `initialize' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/action_controller/metal.rb:140:in `initialize' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/abstract_controller/rendering.rb:74:in `initialize' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/abstract_controller/layouts.rb:301:in `initialize' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/action_dispatch/routing/url_for.rb:103:in `initialize' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/action_controller/metal.rb:140:in `initialize' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/abstract_controller/rendering.rb:74:in `initialize' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/abstract_controller/layouts.rb:301:in `initialize' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/action_dispatch/routing/url_for.rb:103:in `initialize' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/action_controller/metal.rb:140:in `initialize' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/abstract_controller/rendering.rb:74:in `initialize' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/abstract_controller/layouts.rb:301:in `initialize' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/action_dispatch/routing/url_for.rb:103:in `initialize' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/action_controller/metal.rb:238:in `new' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/action_controller/metal.rb:238:in `block in action' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/action_dispatch/routing/route_set.rb:71:in `call' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/action_dispatch/routing/route_set.rb:71:in `dispatch' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/action_dispatch/routing/route_set.rb:35:in `call' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/rack-mount-0.8.3/lib/rack/mount/route_set.rb:152:in `block in call' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/rack-mount-0.8.3/lib/rack/mount/code_generation.rb:96:in `block in recognize' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/rack-mount-0.8.3/lib/rack/mount/code_generation.rb:68:in `optimized_each' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/rack-mount-0.8.3/lib/rack/mount/code_generation.rb:95:in `recognize' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/rack-mount-0.8.3/lib/rack/mount/route_set.rb:141:in `call' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/actionpack-3.1.6/lib/action_dispatch/routing/route_set.rb:538:in `call' 
/Users/john/.rvm/gems/ruby-1.9.2-p320@qstream-ruby19/gems/omniauth-1.1.0/lib/omniauth/builder.rb:48:in `call'
... …
Run Code Online (Sandbox Code Playgroud)

ruby stack-overflow infinite-loop ruby-on-rails-3.1

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

你最有说服力的论据支持自动化流程

你如何说服人们(即非程序员)自动化流程是件好事?

反对的常见论点是"但你只需做[X mindnumbing task]"和" 它只需要[Y mindnumbing时间],只需要做,不要浪费时间去改变事物."

任何其他程序员在非开发工作中工作,自动化是有用但被避开,误解,担心等?你是怎么绕过它的?你和逻辑争论吗?

我?我有点秘密工作,但这可能会让我陷入困境.

culture automation

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

你是如何(或者你有)学习键盘快捷键导航的?

您在编程时学习键盘快捷键的具体技巧是什么?

我不是说"在列表中查找"了解.更确切地说,你使用什么技术来建立我们许多人在一段时间后拥有的自动肌肉记忆?

你每天选择一个键盘快捷键并全天练习吗?你是否专注于同时学习它们?你学习了一个应用程序的快捷方式,然后转移到另一个应用程序吗?你玩过奇怪的"游戏"提醒你吗?没有?有点激进吗?

这对我来说是一个有趣的问题,因为我的新(第一)Mac即将到来,我很感兴趣我将使用哪些方法尽快学习尽可能避免鼠标在我完全陌生的环境中.

macos keyboard-shortcuts

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

Python的heapify()不能很好地与列表理解和切片一起使用吗?

我在一个程序中发现了一个有趣的错误,我有些懒惰地实现了,并且想知道我是否正确地理解它.简短的版本是Python的heapq实现实际上并没有对列表进行排序,它只是以堆中心方式查看列表.具体来说,我期望heapify()得到一个有序列表,以有序的方式促进列表理解.

使用优先级提示示例,如Python文档中所示:

from heapq import heapify, heappush, heappop
from random import shuffle

class Item(object):
    def __init__(self, name):
        self.name = name

lst = []

# iterate over a pseudo-random list of unique numbers
for i in sample(range(100), 15):
    it = Item("Some name for %i" % i)
    heappush(lst, (i, it))

print([i[0] for i in lst])
Run Code Online (Sandbox Code Playgroud)

结果是

>>> [2, 22, 7, 69, 32, 40, 10, 97, 89, 33, 45, 51, 94, 27, 67]
Run Code Online (Sandbox Code Playgroud)

我们注意到,这不是列表的原始排序,但显然是一些以堆为中心的排序,如此处所述 …

python heap list-comprehension

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

ActiveRecord ::基本SQL结果对象类型在MySQL和PostgreSQL中不同

我错过了什么吗?相同的控制台,相同的代码库,不同的数据库连接 结果:返回了不同的对象类型.如果使用MySQL,我们得到一个数组数组,如果使用PostgreSQL,我们得到一个哈希数组.

示例类

class User < ActiveRecord::Base
   ...
end

class Series < ActiveRecord::Base
   establish_connection postgres_database_hash
   ...
end
Run Code Online (Sandbox Code Playgroud)

使用MySQL连接

> User.connection.execute('SELECT * from users limit 2').to_a
   (211.0ms)  SELECT * from users limit 2
 => [[1, "jmetta", "jmetta@gmail.com"], [2, "johnmetta", "jmetta+test@gmail.com"]]
Run Code Online (Sandbox Code Playgroud)

与Postgres连接

> Series.connection.execute('SELECT * from series limit 2').to_a
   (107.1ms)  SELECT * from series limit 2
 => [{"id"=>"29", "enr_id"=>"114118", "ent_id"=>"164",}, {"id"=>"30", "enr_id"=>"114110", "ent_id"=>"164"}]
Run Code Online (Sandbox Code Playgroud)

结尾

似乎在这个抽象层面to_a要求给出结果,结果应该是相同的.

mysql postgresql ruby-on-rails rails-activerecord

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

Ruby if ifeliner inside if语句产生错误

这是一个意想不到的发现.我之前没碰过的一个非常基本的Ruby问题:

a = "a"

if a
  test = "yes" if a == "a" else "no"
else
  test = "no"
end
Run Code Online (Sandbox Code Playgroud)

运行它会产生错误:

syntax error, unexpected kELSE, expecting kEND
Run Code Online (Sandbox Code Playgroud)

看起来嵌套的oneliner溢出到封闭的if语句中.这是什么通用的解决方案?在爆炸的if语句中没有使用oneliner?(它在爆炸封闭的条件时起作用,因为它由end关键字终止.

顺便说一句,这是一个最小化的人为例子,所以不需要解释它的愚蠢或问题为什么我这样做.我正在寻找一个关于如何防止ruby oneliner的一般解释,如果语句溢出到封闭的条件范围内.

ruby if-statement

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

使用Authlogic验证多个模型

我有多个用户帐户类型,每个类型都有不同的信息.例如,业务联系人链接到企业,学校管理员和学生链接到学校.学生有实际地址,但业务联系人和学校管理员使用组织地址.每种类型都有其他独特的信息.

我倾向于为学生,学校管理员和业务联系人提供单独的表格,但是使用Authlogic,我有一个带有身份验证信息的Users表(所有人都需要登录).

问题是如何最好地将此单一身份验证表与各个配置文件相关联.看起来像一对一的关系需要一个表(例如用户< - >学生用户< - > Business_contacts).我希望有一种"一对一"的关系(用户< - >学生 Business_contacts).有没有一种使用连接表或其他构造的好方法?

或者,我可以统一Users表中的公共信息,并在XML中提供"profile"列以支持唯一信息.我的想法是将所有内容保存在干净的DB列中会简化选择/插入.

思想,想法?

database-design ruby-on-rails authlogic

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