我想编写一个Ruby on Rails应用程序,它使用RESTful Web服务API对结果执行一些逻辑,然后在我的视图上显示该数据.例如,假设我想编写一个在search.twitter.com上搜索的程序.使用纯ruby我可能会创建以下方法:
def run(search_term='', last_id=0)
@results = []
url = URI.parse("http://search.twitter.com")
res = Net::HTTP.start(url.host, url.port) do |http|
http.get("/search.json?q=#{search_term}&since_id=#{last_id.to_s}")
end
@results = JSON.parse res.body
end
Run Code Online (Sandbox Code Playgroud)
我很想把这个方法作为私有方法放到我的Rails控制器中,但我的一部分认为有更好的,更"Rails"的方法来做到这一点.有最佳实践方法还是这是最好的方法?
我试图使用JQuery将dataString传递给ajax调用.在调用中,我构造了get参数,然后将它们发送到接收端的php页面.麻烦的是数据字符串中有&符号,HTML严格验证器正在插入它.
这是代码:
$(document).ready(function(){
$("input#email").focus();
$('#login_submit').submit(function(){
var username = $('input#email').val();
var password = $('input#password').val();
var remember = $('input#remember').attr("checked");
var dataString = "email="+username+"&password="+password+"&remember="+remember;
$.post('login.php', dataString, function(data) {
if (data == 'Login Succeeded.') {
location.reload(true);
} else {
$("input#email").focus();
$("#login_msg").html(data).effect("pulsate", {times: 2}, 1000);
}
});
return false;
});
});
Run Code Online (Sandbox Code Playgroud)
以下是验证器消息的示例:无法为通用实体"password"生成系统标识符.
var dataString = "email="+username+"&password="+password+"&remember="+rememb…
Run Code Online (Sandbox Code Playgroud)
(在验证器中,第一个&符号后面的"p"标记为红色,表示失败点).
我想使用CouchDB为我存储一些数据,然后使用RESTful api调用来获取我需要的数据.我的数据库名为"test",我的文档都有类似的结构,看起来像这样(其中hello_world是文档ID):
"hello_world" : {"id":123, "tags":["hello", "world"], "text":"Hello World"}
"foo_bar" :{"id":124, "tags":["foo", "bar"], "text":"Foo Bar"}
Run Code Online (Sandbox Code Playgroud)
我希望能够做的是让我的用户发送一个查询,例如:"给我所有包含'hello world'字样的文档.例如.我一直在玩视图,但它看起来像他们只允许我将这些值中的一个或多个移动到map函数的"key"部分.这使我能够做到这样的事情:
http:// localhost:5984/test/_design/search/_view/search_view?key = "hello"
但这不允许我让我的用户指定他们的查询字符串.例如,如果他们搜索"hello world"怎么办?我必须做两个查询:一个用于"hello",一个用于"world"然后我必须编写一堆javascript来组合结果,删除重复项等(YUCK!).我真正想要的是能够做这样的事情:
http:// localhost:5984/test/_design/search/_view/search_view?term = "hello world"
然后在views map/reduce函数中使用参数"hello world"来查找tags数组中同时包含"hello"和"world"的所有文档.CouchDB甚至可以做到这一点吗?还有另一种方法可以在我没想到的视图中实现这一目标吗?
我想将以下字符串转换为数组/嵌套数组:
str = "[[this, is],[a, nested],[array]]"
newarray = # this is what I need help with!
newarray.inspect # => [['this','is'],['a','nested'],['array']]
Run Code Online (Sandbox Code Playgroud) 我对编程很新,在做很多阅读时,这个lambda的概念不断出现,但是我很难理解它实际上是什么,如何实现它将使我的编程生活变得更好.首先,什么是lambda,第二,它是如何实现的?
感谢所有发布的人.正如评论中提到的,这是重复的,但是这里有很多很棒的答案,我想为社区保留它们,所以我把它变成了一个社区帖子.以下是其他问题的链接:
是否有一种简单的方法可以判断ruby脚本是否已经在运行,然后对其进行适当处理?例如:我有一个名为really_long_script.rb的脚本.我每隔5分钟就跑一次.当它运行时,我想查看上一次运行是否仍在运行,然后停止执行第二个脚本.有任何想法吗?
我正在使用RSpec(3.x)来测试行为类似于计算器的对象。该对象将结果放入哈希中。但是我无法在测试中获得正确匹配的哈希值。这是我正在谈论的示例:
class ObjectUnderTest
def calculate(a, b)
value = a.to_d / b
{
value: value
{
end
end
Run Code Online (Sandbox Code Playgroud)
测试如下所示:
RSpec.describe ObjectUnderTest do
it "calculates the product of two values" do
o = ObjectUnderTest.new
expect(o.calculate(1, 3)).to eql({value: 0.333})
end
end
Run Code Online (Sandbox Code Playgroud)
问题在于0.333是浮点数,哈希中包含的实际值是BigDecimal。如果我在测试中更改了该行,则表示如下内容:
expect(o.calculate(1, 3)).to eql({value: 0.333.to_d(3)})
Run Code Online (Sandbox Code Playgroud)
...测试仍然失败A)因为精度不同,并且B)在我的实际代码中,我有几个键值对,并且我不想在所有代码上都调用k.to_d(some_precision)比较哈希以使其通过。
有没有一种方法可以使用a_value_之类的值与某个范围内的值进行比较,我不必在那里硬编码一个确切的数字吗?
我有一个表MySQL
有3个字段,我想强制两个字段之间的唯一性.这是表格DDL
:
CREATE TABLE `CLIENT_NAMES` (
`ID` int(11) NOT NULL auto_increment,
`CLIENT_NAME` varchar(500) NOT NULL,
`OWNER_ID` int(11) NOT NULL,
PRIMARY KEY (`ID`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)
该ID
字段是代理键(此表正在加载ETL).该CLIENT_NAME
字段包含客户端名称.id OWNER_ID
是指示客户所有者.
我以为我可以用一个唯一索引执行本CLIENT_NAME
和OWNER_ID
,
ALTER TABLE `DW`.`CLIENT_NAMES`
ADD UNIQUE INDEX enforce_unique_idx(`CLIENT_NAME`, `OWNER_ID`);
Run Code Online (Sandbox Code Playgroud)
但是MySQL给了我一个错误:
执行SQL命令以更新表时出错.指定密钥太长; 最大密钥长度为765字节(错误1071)
其他人有什么想法吗?