嗨有没有人知道如何在Celluloid:IO和使用websocket 之上运行一个运行Sinatra应用程序的快速代码示例?
我知道Reel for Celluloid的存在("Reel是一个基于Celluloid:IO建立在基础上的快速,无阻塞'的'服务'网络服务器 ......并且直接支持webockets)但是我仍然想继续使用Sinatra因为我喜欢它,我已经习惯了它,我宁愿不重写很多代码......
希望你能帮忙.
在Rails(4.1.5/ruby 2.0.0p481/win64)应用程序中,我在Student和Course之间存在多对多关系,并且有一个表示关联的连接模型StudentCourse,并且有一个名为started 的附加属性(默认设置)在"假").
我还在student_id和course_id组成的join-table中添加了一个索引,并设置了一个唯一的检查,就像这样
t.index [:student_id, :course_id], :unique => true, :name => 'by_student_and_course'
Run Code Online (Sandbox Code Playgroud)
我希望它是一个复合主键,但由于在rails中没有复合主键(不使用gem),我还添加了一个名为id的主键:
t.column :id, :primary_key
Run Code Online (Sandbox Code Playgroud)
现在我看到关联是通过以下方式创建的:
Student.first.courses.create(:name => "english")
Run Code Online (Sandbox Code Playgroud)
要么
Course.first.students << Student.first
Run Code Online (Sandbox Code Playgroud)
我认为这很好,这是预期的行为.
作为参考,Student.all,Course.all和StudentCourses.all将返回如下表格:
Student.all
+----+-----------+
| id | name |
+----+-----------+
| 1 | Aidan |
| 2 | Alison |
| 3 | Elizabeth |
+----+-----------+
Run Code Online (Sandbox Code Playgroud)
Course.all
+----+----------+------------------+
| id | name …
Run Code Online (Sandbox Code Playgroud) 好吧也许这很简单,但是......鉴于此:
arr = ("a".."z").to_a
arr
=> ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
Run Code Online (Sandbox Code Playgroud)
..而且我正在尝试将所有"arr"值更改为"bad"
为什么没有这方面的工作?
arr.each { |v| v = "bad" }
arr
=> ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
Run Code Online (Sandbox Code Playgroud)
答案表明"v"是块的局部变量(数组值的"副本"),我完全明白(以前从未困惑过我)但是
..如果数组元素是对象,它为什么工作?
class Person
def initialize
@age = 0 …
Run Code Online (Sandbox Code Playgroud) 我一直在搜索,但似乎无法在数据库中找到唯一和非唯一索引概念背后的适当解释.
例如,在Rails中,您可以为给定字段创建唯一且非唯一的索引,如http://railsguides.net/advanced-rails-model-generators/中所述.
我不明白的是:如果索引的目的是"设置快捷方式"到表中的值位置以便更快地访问它,那么多个值如何共享相同的索引?
比方说,我将电子邮件存储在一个表中,我想索引它们的值位置.如果到目前为止我做得对,如果我有非唯一索引,那么DB可以将foo @ bar.com索引到位置150并且bar @foo.com也索引到位置150.所以如果我最终说100在位置150处的不同值,如果DB仍然必须搜索150处的所有值以找到我需要的确切记录,这不会首先破坏索引的目的吗?
这有什么意义?
谢谢
什么是最接近在 HTML 中使用 Ruby 的东西,比如带有<?php ?>
标签的PHP ?
可以在不需要强加网站结构的框架或不需要运行 Ruby 服务器、ecc 的情况下完成吗?
有办法吗?
我试图在定义这些对象的类中保持给定类的对象实例的计数.
首先我知道代码反射和ObjectSpace.each_object,但我不想使用反射,让类本身能够"照顾"自己.
我环顾四周,我发现的所有解决方案似乎都在类定义中使用了@@ class_variables,例如,这个问题的接受答案:如何在Ruby中获取类实例?
虽然我一直在阅读,但我发现ruby中的类变量在某些情况下表现得非常糟糕......最大的原因是:
在程序顶层定义的类变量由所有类继承.它的行为类似于全局变量.
来源及更多信息:http://ruby.runpaint.org/variables#class
所以,我尝试使用类实例变量而不是类变量来编写一个存储其实例化对象数量的类,显然它似乎工作正常但是因为我仍然在学习这种"深入的"语言主题我想问你我写的代码是否正确和/或有意义:
class Pizza
@orders = 0
def self.new
@orders += 1
end
def self.total_orders
@orders
end
end
new_pizza = Pizza.new #=> 1
special_pizza = Pizza.new #=> 2
fav_pizza = Pizza.new #=> 3
Run Code Online (Sandbox Code Playgroud)
我的一个疑问是,重写Pizza.new方法我"删除"原始.new方法的一些重要功能?(原始的.new方法提供了什么?我如何使用反射"检查"方法代码?)我还做错了什么,或者我的方法完全错误,为什么?
谢谢
编辑:忘了添加这个重要的一点:
作为一种更好地约束事物范围的方法,我希望Pizza类能够只计算对象实例化时间,而不是在其@instance类变量上有一个setter方法,可以在代码中随时访问它(Pizza.count = 1000).这就是我试图覆盖"新"的原因.
我认为这是最棘手的部分让我问自己我的方法是在正确的方向,或者我是否应该停止对这些语言机制的反应如此之多,而是添加一些逻辑来让计数只在一个对象发生时发生一个Pizza类进入了ObjectSpace ..
我只是在寻找更优雅,更臃肿的方式来获得这种语言功能..
无论哪种情况,帮助将不胜感激..
再次感谢.
ruby counter instances class-variables class-instance-variables
在 Rails ( 4.1.5 / ruby 2.0.0p481 / win64 ) 应用程序中,我有 Student 和 Course 之间的多对多关系和表示关联的连接模型 StudentCourse,它有一个名为“started”的附加属性,它默认设置为“false”。
我还在由 student_id 和 course_id 组成的连接表中添加了一个索引,并设置了一个唯一的检查,就像这样
t.index [:student_id, :course_id], :unique => true, :name => 'by_student_and_course'
Run Code Online (Sandbox Code Playgroud)
现在我看到关联是通过以下任一方式创建的:
Student.first.courses.create(:name => "english")
Run Code Online (Sandbox Code Playgroud)
或者
Course.first.students << Student.first
Run Code Online (Sandbox Code Playgroud)
这很好,我想这是预期的行为。
我正在寻找的是获取和设置“开始”属性的正确方法。 从其他模型而不是直接从连接模型访问该属性时,我看到了一个奇怪的行为。
s = Student.create
c = Course.create(:name => "english")
s.student_courses.first
Run Code Online (Sandbox Code Playgroud)
=> | "英语" | 假| #(为了实用,以表格的形式表示)
s.student_courses.first.started = true
Run Code Online (Sandbox Code Playgroud)
=> | "英语" | 真实|
s.save
Run Code Online (Sandbox Code Playgroud)
=> 真
好的,这看起来已经保存了,但是当我抢劫 ak 时:
StudentCourse.first
Run Code Online (Sandbox Code Playgroud)
=> | 1 | 1 | 假|
因此,如果我通过学生嵌套属性,则将其设置为 true,但在连接模型中它仍然为 …
ruby activerecord many-to-many ruby-on-rails nested-attributes
ruby ×5
activerecord ×2
arrays ×1
block ×1
c# ×1
celluloid ×1
concurrency ×1
counter ×1
database ×1
each ×1
enumerator ×1
html ×1
if-statement ×1
instances ×1
json ×1
many-to-many ×1
php ×1
shorthand-if ×1
sinatra ×1
unique-index ×1
websocket ×1